はじめに
こんにちは。プログラミング歴1年、エンジニア志望の学生です。
最近、昔作ったiOSアプリのコードのリファクタリングをしています。というのも、プログラミングを始めた頃はコードの可読性とか全く意識せずに書いていたので、見返してみると「うわぁ...🫠」となるようなぐちゃぐちゃなコードだらけでした。
GWというまとまった休みが来たので、これを機に一気に見直そう!と思った次第です。
概要
Swiftにおいて、可読性の高い命名の仕方を知る
結論
- 意味が伝わる命名をする
- 「簡潔さ」より「伝わりやすさ」を意識する
- メソッド名は動詞から始める
- 統一性に気を配る
命名規則
以下のSwift API Guidelineに従っています。
https://github.com/cookpad/styleguide/blob/master/swift.ja.md
また、リーダブルコードという有名なコーディング指南書も参考にしています。
https://www.oreilly.co.jp/books/9784873115658/
スネークケース、キャメルケースとは
一つの変数・メソッド名などに複数の単語を繋げて表現したい時の繋げ方です。
・スネークケース...文字の区切りをハイフンで表す
snake_case = ""
sample_method()
・キャメルケース...文字の区切りを大文字で表す
camelCase = ""
sampleMethod()
どちらを採用するかは言語や会社のコーディング規約によって異なりますが、Swiftではキャメルケースを採用しており、以下のような規約があります。
- クラス、プロトコル名は
UpperCamelCase
にする
ViewModel
ObservableObject
- それ以外は
lowerCamelCase
にする
titleText
requestAuthorization
Xcodeを使っていると補完機能や初めから書かれているコードでなんとなく書き方がわかるので、この辺りは問題ないと思います。
意味が伝わる命名をする
私が実際に書いていた変数がこちら。
daySelection
...どんな意味かわかりますか?謎ですよね。書いた私でさえ、見直した時「ん?」となりました😓
これは「選択した日付を格納する変数」なのですが、dayとSelectionの関係が曖昧でわかりづらくなっています。
では、以下のように直すとどうでしょう。
selectedDay
今度は、「selected(選択された) -> day(日付)」と自然に理解できるようになったと思います。
コードを書いている時は自分の頭の中で理解ができているので、適当に単語を繋げても違和感がありませんが、他人が見た時や、自分が後になって見返す時に意味不明な名前になっていることがよくあります。曖昧な単語を避け、意味が明確な名前になるようにするのが大切です。
「簡潔さ」より「伝わりやすさ」
私は、以前まで「簡潔なコードの方が見やすい!」と思っていましたが、自分のコードを見返してみると、大事なのは、「短いコード」ではなく「理解しやすいコード」を書くこと何だなと気付かされました。
以下は、設定した通知時間を更新するメソッドです。
func updateTime() {...}
updateTime
だけを見ても、「何の時間を更新するの?」と迷ってしまいます。
func updateNotificationTime() {...}
このようにNotificationと加えることで、メソッド名は長くなりましたが「通知時間を更新するんだな」と一目でわかります。
メソッド名は動詞から始める
メソッドは、オブジェクト指向プログラミング(OOP)において「手続き」のことを指します。メソッド名を決めるときは、変数と違い動詞を使うようにしましょう。
例えば、タスクの通知処理をするメソッドを定義するなら
func notificationTask() {...}
よりも
func noticeTask() {...}
の方が明確でわかりやすいです。
統一性に気を配る
これは命名に限ったことではないですが、コーディングにおいてスタイルを統一することは非常に重要です。
例えば、以下ような2つのメソッドを定義するとします。
func taskStart() {...}
func saveTask() {...}
一つ目のメソッドは「名詞(task) -> 動詞(start)」になっているのに対して、二つ目は「動詞(save) -> 名詞(task)」となっています。統一性があった方がコードが見やすくなるので、どちらか(というか動詞 -> 名詞の方が自然)に統一しましょう。
func startTask() {...}
func saveTask() {...}
終わりに
まだまだ命名について大事なことはあるのですが、私が書いてきたコードの直しを中心に紹介しました。
リーダブルコードや下記の参考サイトを見ていただければ幸いです。
https://muapps.hatenablog.com/entry/2022/07/31/190826
https://github.com/cookpad/styleguide/blob/master/swift.ja.md