-
Notifications
You must be signed in to change notification settings - Fork 0
naming
変数名や関数名、クラス名など...プログラミングをしていると様々なものに名前をつけます。
命名はおろそかになりがちですが、とても大事なことです。
命名をしっかりやると飛躍的に読みやすく書きやすいコードになります。
プログラミングにおいて、命名する際にスペースを入れることはできません。
なので、複数の単語を繋げて命名するときは、単語の区切りをアンダースコアなどで代替します。
記法名 | 例 | 備考 |
---|---|---|
スネークケース | example_case | すべて小文字で、区切りをアンダースコアにする |
ローワーキャメルケース | exampleCase | 先頭は小文字、各単語の先頭を大文字 |
アッパーキャメルケース | ExampleCase | 先頭は大文字、各単語の先頭を大文字 |
まずは基本的なルールから学んでいきましょう。
Swift では以下のようになります。
- 変数名、関数名、引数名:ローワーキャメルケース
var senderName: String
func saveMessage(textMessage: String) -> Void {
// NOP
}
- グローバル定数、クラス定数:スネークケースの大文字
普通の定数はローワーキャメルケースです。
しかし、グローバル定数などは全部大文字にします。
Swift に限らず、大きな範囲で使える定数であることをわかりやすくするため大文字にする傾向があります。
public let GOOGLE_PLIST_NAME = "GoogleService-Info"
class MsgModel {
static let TABLE_NAME = "MSG_TABLE"
}
- クラス名、構造体名、列挙型名、プロトコル名:アッパーキャメルケース
Swift に限らず、変数名などと区別するため最初を大文字にする傾向があります。
class MsgModel {}
protocol MsgModelDelegate: class {}
enum Weather: String {}
struct Author {}
プログラミング言語によって命名規則が変わるので注意です。
Swift の書き方に慣れてるから!とかで他の言語の命名規則を無視してはいけません。
新しい言語を学ぶときはまず命名規則に目を通しましょう。
郷に入っては郷に従え、ですね。
さあ、記法のルールをさらったところでさらにわかりやすい命名について考えていきましょう。
以下の関数を見てください。
func check(n: Int) -> bool {
return n % 2 == 0
}
これは数字を引数として、偶数であるか判断する関数です。
関数名だけでは何のこっちゃわかりませんね。
まあ、簡単な処理なんで処理を見に行ったらすぐわかるかもしれません。
でも後で呼び出すとき「この check
ってなんだったっけ?」ってなるかもしれません。そうなった時、処理をいちいち見に行くのは面倒です。
というわけで、以下のように書き換えましょう。関数名なのでローワーキャメルケースですね。
func checkEven(num: Int) -> bool {
return num % 2 == 0
}
適切に名づけることで関数名だけで何をしているかわかるようになりました!ナイスですね。
ちなみに先ほどの読みづらい関数には、さらに欠点があります。
func check(n: Int) -> bool {
return n % 2 == 0
}
この偶数チェック関数があるとき、奇数チェック関数を作ってくれと言われたらどういう命名にするか悩みませんか?
もうすでに check
って使っちゃってるからな~ってなってしまうと思います。
これは check
というあまりにも汎用性の高い言葉を使っていることが問題なのです。
より具体的に名づける、つまり checkEven
にしておけば、checkOdd
にすればいいって簡単にわかりますね。
では、具体的にすればするほどいいのでしょうか?
そういうわけでもありません。
int num
しか入らないことや、bool
で返すことなどを盛り込んだ命名にしてみました。
func checkIntNumEvenToBool(num: Int) -> bool {
return num % 2 == 0
}
どうでしょうか?私の命名センスが無いからかもしれませんが、わかり辛くなってしまったのでは?
具体的すぎてもわかり辛くなってしまう事がわかると思います。
長すぎる命名は単純に使いづらいですしね...
ここで、「じゃあ、Int 型を引数に取ることとか、bool を返すことは関数名から読み取れなくていいの?」って意見があると思います。
たしかに関数名からは読み取れません。が、これらの情報は引数の型と関数の戻り値の型が教えてくれます。
だから、関数名にこれらの情報を盛り込むのは無駄なのです。
わかりやすい命名方法が少しでもわかっていただけたら幸いです。
個人的にプログラミングにおいて最も難しいことの一つだと思っています。(私のセンスがないだけかもしれませんが...)
わかりやすく、しかし長くなりすぎず適切に命名していく...とても難しいことですが、大事なことなので少しずつでいいので心がけていきましょう。