RubyエンジニアのためのSwift入門(inject -> reduce編)
みなさんこんにちは
元RubyエンジニアのiOSアプリエンジニアです。
普段、iOSアプリはSwiftで書いています。
最近、Rubyをどんどん忘れているのでとても不安です。
その昔、ARCがまだ出ていなかった頃に業務で幾つかアプリをリリースしたことがあり、その頃はまだSwiftがなかったのでObjective-Cを使ってました。
Swiftが出てからはObjective-Cで書く気になれないくらい気に入ってしまいました。
Swiftを書いていると、Rubyと似ているなと思うことが結構あるのですが、それらを紹介していきたいと思います。
今回は、Rubyでコードを短く書くときに便利な(と思っている)Enumerable#injectをテーマにします。
検証環境
- Swift 3.0.2
- Ruby 2.3.3p222
よく見かける例ですが、Rubyで配列の合計値を出したい場合、以下のように簡単に書くことができます。
irb(main):001:0* [1,2,3,4,5,6,7,8,9,10].inject(:+) => 55
これは、以下のようなコードを省略したものです。
irb(main):001:0> [1,2,3,4,5,6,7,8,9,10].inject { |sum, i| sum + i } => 55
injectはブロックに渡される1つ目の値に合計値が入ってきて2つ目の値に配列の値が入ってきます。
そしてブロックの戻り値が次のブロックのsumに渡されるので、上記のように実装すると、配列の値を累計した結果が得られます。
なんとRubyでは、injectの引数にシンボルを渡すとそのあたりをうまくやってくれるのです。(すばらしい)
SwiftではreduceというメソッドがArrayに用意されていて、Rubyのinjectと同じようなことができます。
[1,2,3,4,5,6,7,8,9,10].reduce(0,+)
これも省略した書き方で、以下のようなコードを省略したものです。
[1,2,3,4,5,6,7,8,9,10].reduce(0) { (sum, i) -> Int in sum + i }
SwiftのReduceの場合、初期値を入れているところがRubyと違いますね。
ちなみにRubyでは、reduceというinjectのエイリアスメソッドがあります。
irb(main):001:0> [1,2,3,4,5,6,7,8,9,10].reduce(:+) => 55
Swiftって、本当にいい言語ですね。
TAG
新しいことや難しい課題に挑戦することにやりがいを感じ、安定やぬるい事は退屈だと感じます。 考えるより先に手が動く、肉体派エンジニアで座右の銘は諸行無常。 大事なのは感性、プログラミングにおいても感覚で理解し、感覚で書きます。
TAG
- Android
- AWS
- Bitrise
- CodePipeline
- Firebase
- HTML
- iOS
- IoT
- JavaScript
- KPI
- Linux
- Mac
- Memcached
- MGRe
- MGReのゆるガチエンジニアブログ
- MySQL
- PHP
- PICK UP
- PR
- Python
- Ruby
- Ruby on Rails
- SEO
- Swift
- TIPS
- UI/UX
- VirtualBox
- Wantedly
- Windows
- アクセス解析
- イベントレポート
- エンジニアブログ
- ガジェット
- カスタマーサクセス
- サーバ技術
- サービス
- セキュリティ
- セミナー・展示会
- テクノロジー
- デザイン
- プレスリリース
- マーケティング施策
- マネジメント
- ラボ
- リーンスタートアップ
- 企画
- 会社紹介
- 会社紹介資料
- 勉強会
- 実績紹介
- 拡張性
- 採用
- 日常
- 書籍紹介
- 歓迎会
- 社内イベント
- 社員インタビュー
- 社長ブログ
- 視察
- 開発環境