tetu式

ゲームと音楽・作曲の自己満足と悩みどころの多いプログラムのブログ。

Xcode Swiftの行末セミコロン

今回はプログラミングの文章の後ろにあることでおなじみのセミコロンの話。




私が今までやってきたプログラミング言語のほとんどは行末にセミコロンをつけないと
エラーが出たり、なんらかの不具合が出るものばかりでした。


今日までSwiftの記事に書いたコードは全て行末にセミコロンをつけていたのですが、
Swiftはセミコロンが行末になくても良い言語です。

var numA: Int = 5
var numB: Int = 13
var numC: Int = numA + numB

print(numC)

このように書いてもエラーは何も起こりません。


で、思ったこと。
セミコロンなしで文の終了という扱いなら改行混じりの
文字連結や計算はできるのか?


結論を先に言うとなんの問題もなくできました。


なんでこんなこと思ったのかっていうと・・・
以前研修でVB.NETという言語に触れたことがありまして。
この言語もセミコロンいらずで改行することで文末になる言語です。
ですが、この言語は改行を確実に文末と見る性質があり、
別の行に入った時点で別な処理が動くような言語です。
改行してもまだ同じところを処理してるよ、と言うのに
文末にアンスコを明示的につけないといけないという規則がありました。

Dim a As String
Dim b As String
Dim c As String

a = "てすと1"
b = "てすと2"

'この部分はエラー
c = a &
    b

'こう書かなきゃいけない
c = a & _
    b


こんな感じ。

ですがSwiftは改行が文末であると同時に、意味的に正しい書き方をしてれば
まだ処理が続いていると判断してくれます。

var jap: Int = 79
var mat: Int = 65
var soc: Int = 55
var sci: Int = 86
var eng: Int = 47

var total = jap +
            mat
            + soc
            + sci + eng

print(total)

こんな書き方しても大丈夫です。
絶対怒られるので真似しないように。


で、行末セミコロンはなくても良いのですが、意味のあるセミコロンはもちろん
省略できません。

例えばfor文。

for(var i:Int = 0; i<5; i++) {
    print(i)
}

for(var i:Int = 0
    i<5
    i++) {
    print(i)
}

こんな書き方する人いないと思いますが・・・
for文のセミコロンは行末セミコロンとは意味が違うので
改行で省略、という書き方はできません。
下段の書き方をするとエラーになります。


で、一般的にSwiftは行末セミコロンをつけない習慣がありそうです。
大半の入門サイトを見てもそうなのですが、
なにせ公式のソースでもセミコロンは使われてないですからね。


とまぁ、VB.NETの一件もあって行末にセミコロンがないと落ち着かないという感じが
私の中にあるので今までセミコロンを付けてコード書いてましたが、
今後はこれに倣ってセミコロンなしでSwiftコード書いてくように心がけようかと思います。




あ、でも独自のルールで行末セミコロン付けないと怒られるという環境にいる人は
そのルールに従ってくださいね。