#はじめに
チーム内リーダブルコード輪読会の第3章。
前回はこちら
次回、「第4章 美しさ」はこちら
#第3章 誤解されない名前
###どんな内容?
- 変数やメソッドには誤解されない名前をつけよう → 最善の名前とは誤解されない名前
- 範囲や境界を表したい場合には適切な単語を利用しよう
- 複数の名前を検討しよう → 名前を決める前に誤解されない名前かどうか想像してみよう
###読んだ感想
実際に自分でコード書いたものでもレビューなどで指摘されることが出てきてしまう「誤解されやすい名前」
getXX
なのに値を取得して→処理して→セットまでしていたり、
StringXX
という名前で日付型や数値まで処理してしまっていたり、
1個の小さな誤解が大きな間違いやトラブルのもとになってしまうこともあり得るので、
処理や利用場面ごとに「どんな名前にするべきか?」を気をつけないといけないなとあらためて認識。。
#例を挙げて議論してみよう
###「XXをしない」、「XXではない」を表現したい時
- 「メール送信しない」というフラグをどう表すべきか?
boolean noSendMail;
booolean isNoSendMail() {
return noSendMail;
}
if(isNoSendMail()) {
メール送信させない場合の処理
return;
}
noXX
という変数がtrue
なので「メール送信しない」というのを表現できている?
→ trueの時にメールを「送るのかor送ってはいけないのか」パッと見でわかりづらい・・?
boolean sendMail;
booolean isSendMail() {
return sendMail;
}
if(!isSendMail()) {
メール送信させない場合の処理
return;
}
sendMail
が!(否定)
されているのでこの方が「メール送信しない」ということが分かりやすい?
###DAOにありがちなgetテーブル名
やselectテーブル名
ってどうなんだろ?
ちょっとテーマとずれるかもですが、メソッドの命名で気になったところを1点
例えばこんなテーブルで・・
HOTEL_ID NUMBER
HOTEL_NAME VARCHAR2
HOTEL_AREA VARCHAR2
HOTEL_ADDRESS VARCHAR2
HOTEL_MESSAGE VARCHAR2
HOTEL_OPEN_FLG NUMBER
DEL_FLG NUMBER
INSERT_DATE DATE
UPDATE_DATE DATE
DELETE_DATE DATE
全カラムを取得する場合はgetHotelDataMaster
やselectHotelMasterData
などでOK?
HOTEL_AREA
とHOTEL_ADDRESS
だけやHOTEL_ID
とHOTEL_NAME
だけなどの一部のみを取得する場合に
getHotelDataMaster
やselectHotelMasterData
は適切だろうか?
小さい組織で閉じている場合や組織横断で汎用的に利用されているようなテーブルであれば、
テーブル名から内容をつかみやすい??
例えばHOTEL_AREA
とHOTEL_ADDRESS
だけの場合はgetHotelSpotInfo
などより具体的な名前にすべき??
#Appendix:議論で出てきたコメントなど
-
「XXをしない」、「XXではない」を表現したい時
例のようにメールを送信しない、させない場合にはescapeXX
、skipXX
などはどうか?
デフォルトの状態を変数とするのが良さそう → 例の場合は1-2、そうしない場合は同じような変数がたくさん出てきた時に混乱しそう・・
フラグをまとめて設定するクラスなどがあっても良いかも。。 -
DAOにありがちな
getテーブル名
やselectテーブル名
ってどうなんだろ?
ディレクトリを「テーブル名」で切りその下により具体性を持たせた名前のsqlファイルを作ると良いのでは?
DTOの名前が適切であればそこでカバーできそう
特定のパラメータをWHERE句に持ってくる場合はXXByHotelId
といった感じや複数レコード返す場合はgetXXList
などでより理解しやすい名前を付けるのも検討するべきだと思う