LoginSignup
2
4

More than 3 years have passed since last update.

Swiftで予約語を変数名やCase名として使う

Last updated at Posted at 2019-11-06

Swiftで変数名やenumのcase名を命名しようとして使った単語が、予約語であったため使えなかったという事態に遭遇したことがある人は多いと思う。

UserStatus.swift
enum UserStatus {

    // Error: private' modifier cannot be applied to this declaration
    case private
    case open
}
Vars.swift
// selfという命名のString型の変数は作れない
let self = "Ham Spam"

今回はその回避方法と、回避方法を使う際の注意点を解説する。

予約語を使う

Swiftの予約語として使われている単語は``でその変数名やenumのcaseを囲むことで使うことができる。

Enum.swift
enum Status {
    case `public`
    case `private`
}

let status1 = Status.private
let status2 = Status.public

print(status1) // private
print(status2) // public 
varnames.swift
let `self` = "String which variable is named self"
print(self) // String which variable is named self

上記の2つの例はどちらもコンパイルエラーにならず、そのまま変数名として使うことができる。

取り扱い注意!

さてここまでで説明した通り、swiftの予約語は``で囲いさえすれば簡単に変数名やenumのcaseとして使えてしまう。これは予約語を変数名やenumのcaseとして使いたければいつでもこの方法を使って使えばいいのだろうか?

Swift.orgの解説には以下のようにある。

If you need to give a constant or variable the same name as a reserved Swift keyword, surround the keyword with backticks (`) when using it as a name. However, avoid using keywords as names unless you have absolutely no choice.

The Basics by Swift.org 太字が著者が編集したもの。

絶対的に他に選択肢がない場合以外は、予約語を``で囲って使うことはしないようにとある。予約語を予約語以外の意味を持たせて使うことは、コードの可読性の低下やミスにつながる可能性があるので極力避けるべきだろう。

さいごに

予約語は簡単に変数名やenumのcaseとして使うことが可能だが、極力避けるべきだ。予約語を使いたくなったら創意工夫をしてできる限りその予約語を使わない別の変数名を考えるのが良いだろう。また規模が大きいプロジェクトになった場合はそもそも予約語をこのような方法で使うのを禁止するルールを定めるのもありかもしれない。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4