DEV Community

kaede
kaede

Posted on • Updated on

リーダブルコード 3 章 関数と引数編、誤解されない命名をするために

参考文献

https://www.oreilly.co.jp/books/9784873115658/

オライリー公式ストア、電子版 PDF 2112 円

P.29 ~ 第三章 誤解されない名前。

https://dart.dev/guides/language/effective-dart/design

こちらの Dart のガイドラインも参考になる

何をしているのか

上記の本を読んだ上で、理解できたところを自分の言葉でまとめています

3.1

result = objects.filter( year < 2022 )

2022年未満のデータをフィルターするコードがある

これは結果として
2022未満のデータが選択されて
2022未満のデータが返ってくるのか

2022未満のデータが除外されて
2022以降のデータが返ってくるのか

これがわかりにくいらしい。私は選択一択だと思ったが...
なので select か exclude をつかうべきらしい。


3.2

clip("hoge12345", 5) は
"hoge" の結果が返ってくる 
後ろから 5 文字削る remove と
"hoge1" の結果が返ってくる
5 文字になるまで削る truncate
これらが 2 つ考えられる。


なので

3.3

cart_too_big_limit = 10

これは 10 が入るのか入らないのかわからない

なので

max_items_in_cart = 10

10 まで入ると明確な max を使うべき


3.5

printEventInRange(begin, end) => {}

という期間内のイベントを表示する関数のスタート日時、エンド日時では
end に "Oct 17 12:00am" を持ってくると
10/17 00:00 が入るのか入らないのかわかりづらい問題がある

慣例的にこの場合に end の時刻は exclude されるが

open/close や start/expire もあるらしい。(リプライで教えてもらった)


3.6

read_password = true
コレだと
パスワードを読み取るかどうか、必要とするかどうか(リード)
パスワードを既に読んだかどうか(レッド)
かどちらかわからない

なので
読み取る必要があることを表すときは need_password
既に読み取った、認証済みを表す時は user_is_authenticated
を使うべき。

また、否定系で変数を作るのは避けるべき。


3.7

get 系の関数名は中の値を返すだけで計算量が少ないことを表すべき
なので、計算が入るときは compute をつけるべき


3.8

実験の id 100 の変数を再利用して 101, 102, 実験を行うときの命名。

template: 100 だと id 100 の実験が本当の実験ではないと思われる。

reuse: 100 だと 100 回再利用できると思われる
reuse_id : 100 だと id 100 を使えば 101 の実験の再利用ができると思われる

copy: 100 だと この実験を 100 回コピーしてると思われる
copy_experiment: 100 だと実験 id 100 をコピーしてるとちゃんと理解されるらしい。

inherit_from_experiment_id: 100 も明確でわかり易い。


3.9

filter, length, limit, コレらは曖昧だから使わないほうがいい
select, chars, max, に変えるべき

誤解されない名前かよく考えて命名するべき。

get や size は大きな計算を想定されていないので、大きな計算では使わないようにする。

Oldest comments (0)