見出し画像

2020-07-17の開発

現役のエンジニアが毎日どんなことを学んで、どんな開発を行っているのか雑にアウトプットしてみる試みの5日目です。

朝もくもく会

今日は久しぶりに、朝8時からのオンラインもくもく回に参加した。

やったこととしては、プライベートで開発しているiOS アプリのバグ修正などがメインだった。

↑こちらの記事にも書いているが、バックエンドにFirebase を使用して、Sign in with Apple なども実装している。

Swift の Enum と guard 文について

最近本業では触ってないが、Swiftがかなり書き味が良くて、特に良いなと感じたのが、guard 文とenumだった。

guard 文は以下のようなコードになる。

func getUser() -> User? {
    // User を取得する処理
}

func saveUser() {
    guard let user = getUser() else {
        return
    }

    user.save() // Optional 型であれば、user?.save() と書く必要がある。
}

guard 内で、user を取得して、もしユーザーが存在しなかったら else 句に入り早期リターンとなる。ユーザーが存在すれば、user.save() を呼んでいる。

簡単なコードだが、まず guard というシンタックス自体が早期リターンを意識させるようになっているところが良いと感じている。
ちなみに、早期リターンは、if (...) { } else {} 句でエラーチェックなどをやるのではなく先にエラーになったら早めにリターンすることで関数ないのネストを下げ、可読性を上げる手法だ。

また、getUser() 関数の返戻値である User か nil の Optional 型だが、guard 句で nil チェックが行えて、後続の処理では User がいることが確定しているので、Optional を外せる。このOptional の Unwrapping もわかりやすくて好きだ。(同様の理由で、Kotlin も気に入っている)


enumについてだが、Swift の enum は 代数的データ型をサポートしていて、いろいろな場面で助けられている。コードは以下のような感じだ。

enum Color {
    case red
    case green
    case blue
    case rgb(r: CGFloat, g: CGFloat, b: CGFloat)
}

代数的データ型についても以前ブログをかいた。

型によって、データをうまくモデリングできると後続の処理が完結になったり不具合になりうるミスががコンパイル時に発覚できたりする。エラー処理などは、できるだけコンパイラに任せてしまいたいタイプなので、積極的に使っていきたい。


最近読んでた「詳解システム・パフォーマンス」は今日は読み進められなかったので土日に読んでいきたい。


この記事が気に入ったらサポートをしてみませんか?