Syntax Error.

[Sy] Swift入門(2) 〜 識別子

2014/10/07

Swift のリファレンスをちょっとずつ読んでのまとめ第2回です。今回は 識別子 について。

(前回の記事はこちら)

その前に識別子とは?

そもそも識別子って何なのか?ですが、変数や関数(メソッド)やクラスなどを識別するために付けられた名前 のことです。

Swiftで識別子に使える文字

Swiftでは、以下の文字を識別子に使えます。

  • 英数字(a-z, A-Z, 0-9
  • アンダースコア(_
  • $記号
  • Unicode文字

Unicode文字が使えるので、日本語はもちろん、絵文字も使えちゃいます。

なので、こんなことも。

Swiftでは絵文字が使える

この例だと、println(犬)では3が、println(cat.voice)では"にゃー"が出力されます。使う人いないだろうけど。

・・・でもちょっとかわいいじゃないか。にゃー。

識別子のルール

識別子には、以下のルールが適用されます。

  • 数字は1文字目に使ってはいけない。
  • 予約語と同じ名前を使いたい場合は、バッククォートで囲む必要がある。
  • アルファベットの大文字と小文字は区別される。
  • クロージャの仮引数名を省略した場合、プレースホルダとして$0, $1, …が使える。

これらのルールを踏まえると、例えばこんな変数はOK。

var a = "xxx"
var A = "yyy"         // a と A は区別されるので重複しない
var a0 = 3            // 2文字目以降なら数字使っていい
var `class` = "aaa"   // classは予約後だけど、バッククォートで囲めばOK
var _a = 1            // アンダースコアも使える
var `_` = "bbb"       // アンダースコアのみもいけるけど、バッククォート必須
var __ = 10           // アンダースコア1文字じゃなければバッククォートいらないみたい
var $a = 6           // $記号+アルファベットはOK
var あ = 8            // 日本語もOK

逆に、ダメなのはこういう場合

var _ = "bbb"         // アンダースコアのみの場合はだめ
var $0 = "yyy"        // $記号+数字はこうやって自分で定義はできないみたい
var 0a = 3            // 1文字目に数字を使うとだめ

あと、バッククォートで囲んだ場合もそうでない場合も、同じ識別子として処理されるようです。

var a = "xxx"
println(`a`)      // "xxx"が出力される

var `b` = "yyy"
println(b)        // "yyy"が出力される

当然、これはだめでした。

var `class` = "aaa"
println(class)    // エラーになる。classは予約語なのでバッククォート必須

※クロージャについては、また別の記事で。

Swift入門 記事一覧