【Swift3】配列の番号と剰余算と条件演算子?:

先日、友人の書いたSwiftのコードを見ていた。
その中でやっていることは何となく分かるが、どういう演算子(というのか?)を使っているかわからない部分があった。

やっていることは配列を順番に呼び出すため、配列の番号を1ずつ加えていって配列の最後に来たら最初に戻るというのと、
配列の番号を1つづ引いていって最初まで戻ったら最後の番号に移動するという関数です。

配列の変数はstrArray
番号を入れる変数をpositionとして、

自分が普通に考えたら、if文を使って
最初の加えていく関数は、

こんな感じで書くかな?

それを友人は

と書いていた。

調べてみると、「%」は剰余算の演算子です。
x % Y の場合xをyで割った余りが求められます。

例えば、配列strArrayに入っている要素が5つだとすると、配列の番号positionにはいるのは0,1,2,3,4となる。

positionが3の時、次の番号を求められると、(3+1)わる5 は 0あまり4で4が返される。
positionが4の時、次の番号を求められると、(4+1)わる5 で 1あまり0で0が返される。

うーむ非常にスマートに書かれている。(^_^;)

続いて1ずつ引いていく場合自分が書くと、

こんな感じかな?

それを友人は

と書いていた。

(; ・`ω・´)
なんだこれ?なんで一行で?

いろいろ調べた結果、
参考サイト
C言語の演算子について

条件演算子と言うものらしい。

a ? b : c aが真ならbが実行、aが偽ならcが実行。

つまりpositionが0であればstrArray.countから1引いたものを返す、
そうでなければpositionから1引いたものを返す

ということでやってることはif文と同じですね。

しかしスマート。

こういう書き方はふつうにC言語とか習ってる人は知ってるのかなあ?

20数年前のBASICから独学でObjective-cに飛んだ私には分からない(;´∀`)

ま、人様のコードを読むのは勉強になりますね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">