たけぼーの備忘録

暇を持て余した人間の無意味なブログ

Javaから見たSwiftとの違い ~for文編~

こんにちは。今回はSwiftネタです。

最近C#とSwiftに一気に手を出してしまったため、苦悶の日々を過ごしております(笑)

両方ちょっとだけ触ってみる予定だったのに…

そんなわけでSwiftに挑戦しているわけですが、よく分からないところが多い!

さらに、Swiftはバージョンがどんどんあがってるようで、今使われているのはSwift3というものだそうです。

そのため、ググってみても古い情報だった、なんてことがよくあります。

『ちょっと手を出したかっただけなのに、苦しめやがって、このやろう!』な気分なので、苦しめられたところをメモしていこうかな、と思います。

今回は、第一回としてfor文を扱っていこうと思います。

本記事をお読みの方へ

ここで注意点ですが、この記事はJavaなどのC言語的文法をもった言語から見ての感想が大いに含まれています。なぜなら私はJavaしか使ったことがない趣味のプログラマーだから。

ほかのもっとモダンな言語使いのプロフェッショナルな方々には、鼻で笑われてしまうような内容となっておりますので、これを読まずにもっとましなものをお読みください。

それでは参りましょう!

for文の基本構文

みなさん、for文使いますか?

うんうん、そうですよね、使いますよね!

巷では、for文を使わなきゃプログラミングしてるとは言わない、と言われてるとか言われてないとか。

ということで、Swiftでfor文を書こうと思うわけですが、これが一癖あります。

Javaではfor文は以下のようになります。

int a = 0;

for(int i = 0; i < 10; i++){
   a += i;
}

aに0から9までを足し続けるという、びっくりするぐらいのくそコードですが、その際そんなことはどうだっていいんです(笑)

C言語C#もほとんど一緒です。しかし、Swiftではこうなります。

var a = 0

for i in 0 ..< 10{
    a += i
}

for文が全然違うじゃないか!ってなりませんか!?
あっ、なりませんか。すいません。

少なくとも私はそう思いました。

forをいつものように書くとXcodeが怒ります。
おい、Cっぽい書き方をやめないか!的なエラーがでて驚かされます。

ここでぐぐってみると、Swiftにはモダンなforの書き方があって、上のものがそうだ、と知りました。

ちなみに、0..<10 は 0≦i<10 を、0...10は 0≦i≦10 を表すそうです。

上のソースを見ると、ちゃっかり型推論が使われています。varってなんかすごいなー、という気分になります。

色々なfor文

上に書いた書き方は、1ずつ増やして処理したい(i++する)時でしか使えません。ではそのほかの場合ではどうなるのでしょうか。

Javaと比較しながら書いておきます。見出しがJava的な書き方となっております。

for(i = 0; i < 10; i +=2)と書きたいとき

for i in stride(from : 0, to : 10, by : 2)

for(i = 0; i <= 10; i +=2)と書きたいとき

for i in stride(from : 0, through : 10, by : 2)

for(i = 10; i >= 0; i -=2)と書きたいとき

for i in stride(from : 0, through : 10, by : 2).reversed()

まとめ

stride()を使えば、刻み幅を変えることができます。toなら~未満を、throughなら~以下を表しています。

徐々に減らしていく処理では、最後にreversed()を付ければよいそうです。
ネットの記事ではよくreverse()とされていますが、そう書くとXcodeに怒られました。

最後に

いかがでしたでしょうか。今後もよく分からないところが出ましたら、その都度書いていこうと思います。

こういう書き方もあるよ!とかここは違うよ!といったアドバイスをいただけると、大変助かります。

ではまた。