Skip to main content
覚えておきたい

プログラミング作法
2014.09.27
第24回 アルゴリズム勉強会 in cafe?IKAGAWA DO
よろしくお願いします
• 島津 純哉(しまず じゅんや)
• 北海道札幌市出身 金沢大学’11
• DMM.com Labo Webエンジニア (ECサイト, ゲームアプリ)
• Linux, Apache, PHP, MySQL, Memcached, Javascript, HTML5,
Vim, ShellScript, Git
@jshimazu0820 Junya Shimazu
参考文献
• 2000年初版
• 10年以上人気のある名著
• 今日話すのは第1章の内容
いきなりですが問題です
以下のコードの悪いところを探してみよう
if ( (country == SING) || (country == BRNI)	
(country == POL) || (country == ITALY)) 	
{	
/*	
* 国がシンガポールかブルネイかポーランドだったら	
* 現在の時間はオフフック時ではなく応答時	
* 応答時をリセットし曜日をセット	
	 */	
}
悪いところ
• イタリアがコメントにない…
• それぞれの国はいったいどんな関連が…
• 国が増えるたび条件式はどんどん長くなる…
→ たった数行のコードに、これだけの問題
ソースコードは
「プログラマーのための読み物」
として残る「資産」です
資産をきれいに残していくための
「作法」をいくつか紹介していきます
※作法の紹介の前に
• 素養のあるプログラマーにとっては

「当たり前」の内容です
• そういった方は新米プログラマーの教育など
に役立てていただけると幸いです
名前の作法
名前の付け方大事
• 定数、変数、関数、クラス・・etc
• 単なるラベルではない
• 読み手に情報を伝え続けるもの
グローバル変数には説明的な名前を
// 悪い例	
int a = 1;	
int b = 2;	
!
// 良い例	
int beforeNumber = 1;	
int afterNumber = 2;
• 説明的 = 変数名から値が想像できるような名前
ローカル変数には短い名前を
// 悪い例	
for (theElementIndex = 0; theElementIndex <= nelems; theElementIndex++)
{	
!
elem[theElementIndex] = theElementIndex;	
!
}	
!
// 良い例	
for (i = 0; i <= nelems; i++) {	
!
elem[i] = i;	
!
}
• スコープの浅いものは説明的でなくてもよい
関数には能動的な名前を
int function getPendingCount() {	
	 return 1;	
}	
!
!
bool function isActiveCall() {	
	 return true;	
}
• 動詞 + 名詞 が基本
• 真偽値を返すものはis + 名詞
式と文の作法
自然な形の式を使おう
// 悪い例	
if ( !(block_id < actblocks) || !(block_id >= unblocks) )	
!
!
!
// 良い例	
if ( (block_id >= actblocks) && (block_id < unblocks) ) 	
• 論理演算子は少なければ少ない程読みやすくなる!
かっこをつけてあいまいさ回避
// 悪い例	
leap_year = y % 4 == 0 && y % 100 != 0 || y % 400 == 0; 	
!
!
// 良い例	
leap_year = ((y%4 == 0) && (y % 100 != 0)) || (y % 400 == 0);
マジックナンバー
マジックナンバーには名前をつけよう
// 悪い例	
// 0.3って何を意味しているの・・?	
int getTotalPoint(int price) {	
return 0.3 * price;	
}	
!
// 良い例	
# define BONUS_RATE = 0.3;	
int getTotalPoint(int price) {	
return BONUS_RATE * price;	
}	
• 定数、変数、メソッドに置き換えるなど
一貫性と慣用句
一貫性を大事にしよう
• 全体で統一する
• ルールの内容自体は重要ではない
• 字下げ、命名規則 (camelCase, snake_case, PascalCase)
慣用句を使おう
# ふつうのループ	
for (i = 0; i <= n; i++) 	
!
# 無限ループ	
for (;;)	
!
while (1)
• プログラムの慣用句で一貫性を
コメントの作法
コメントに関する作法
• 当たり前のことは書かない
• 関数とグローバルデータにコメントを
• 悪いコードにコメントをつけない、書き直す
• コードと矛盾させない
まとめ
• 悪いコードは読みづらいだけではなく、

問題を抱えていることが多い
• 大事なのはいいコードを書こうという習慣
• 思いやりの精神
こちらもおすすめ
• 「プログラミング作法」

第1章をコンパクトにまと
めたような内容
• 説明がやわらかめでさらに
読みやすい
ご清聴ありがとうございました