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に怒られました。
最後に
いかがでしたでしょうか。今後もよく分からないところが出ましたら、その都度書いていこうと思います。
こういう書き方もあるよ!とかここは違うよ!といったアドバイスをいただけると、大変助かります。
ではまた。