ブロックチェーン・AI・システム開発の株式会社INDETAIL

Swiftでとまどった「_」(アンダースコア)と「$0.0.0」

2017.02.20
nagi

先月発売された某ゲームで恐怖体験を堪能しているnagiです。

はじめに

Swiftに初めて触れたのはリリース直後でしたが、しばらくSwiftから遠ざかっていました。
久々にSwiftに戻ってみれば、「Swift 3」となっており...「この書き方は何?」という状態に陥ることが結構ありました。

そこで今回は、Swiftでとまどった書き方を2個チョイスし、その書き方の意味を紐解いてみます。

その1. そのアンダースコアは何ですか?

いたるところで見かけるようになった「_」(アンダースコア)。
以前はそんなに出現率は高くなかったように思うのですが、今回は3パターンのアンダースコアに遭遇しました。

• (1)のアンダースコア

「intToString」メソッドから戻り値が返ってくるが、その戻り値は使用しない。
という意味のアンダースコアです。
このアンダースコアを付けないと、Xcodeが「Result of call to 'intToString' is unused」というワーニングを出してきます。

戻り値を使用しないときはアンダースコアを付けておいた方が良さそうです。

• (2)のアンダースコア

「intToString」メソッドを呼ぶとき、引数に「value」を付けなくてもOK!
という意味のアンダースコアです。

こうではなく

こう

メソッド名から何を引数に設定するかが明確な場合など、アンダースコアを付与してあげると、コードがすっきりするので良さそうです。

• (3)のアンダースコア

「result1」「result2」は何らかの値を返してくれるが、その値は使用しない。
という意味のアンダースコアです。
(1)のアンダースコアと同じような感じです。

こちらもアンダースコアを付けないと、Xcodeが「Immutable value 'xxx' was never used; consider replacing with '_' or removing it」というワーニングを出してきます。

その2. 「$0.0.0」は何ですか?

連想配列の値でソートしたい場合、検索すると以下のような書き方がヒットします。

上のsortedは、連想配列itemsのキー(「key3」「key1」「key2」)を昇順にソートしています。
下のsortedは、連想配列itemsの値(「8」「3」「1」)で昇順にソートしています。
結果は以下のようになります。

「$0.0.0」「$0.1.0」など...。
「$0」で何が取れるのか理解していればどうということはないのですが、初見で混乱してしまいました。
「$n」の値を出力してみれば、どういう仕組みでソートされているのか理解できます。

 

1. 「$0」で以下が取得できます(キーと値の組み合わせを1個ずつ取得)

("key3": 8)
("key1": 3)
("key2": 1)

 

2. 「$0.0」で以下が取得できます(キーを1個ずつ取得)

"key3"
"key1"
"key2"

 

3. 「$0.1」で以下が取得できます(値を1個ずつ取得)

8
3
1

 

これらの法則がわかれば、「$0.0.0」に何が入るのか想像できます。

「$0.0.0」は連想配列itemsの最初のキー("key3")です。
これと「$0.1.0」、次のキー("key1")を比較し、「$0.1.0」の方が大きければmapに詰めます。
このように「二つの要素を取り出して比較」ということを、全要素に対してループして処理することでソートしているのですね。
(この書き方はSwiftだけではなく、他の言語でも見たような気がしなくもないですが)

まとめ

特にとまどいを覚えた書き方をチョイスして紐解いてみました。
とまどいを覚える書き方は、「こんな書き方ができるんだ!」と感動することも多いです。
いろいろなコードを見て、Swift特有のステキな書き方を捜索してみるのも良さそうです!

関連タグ:

nagi

エンジニア。 肉とスイーツが大好物。

「いいね」ボタンを押すと、最新情報をすぐに確認できます。