cafegale(LeafCage備忘録)

LeafCage備忘録(はてなダイアリー)と統一しました。

フォーマット規約一例(リーダブルコードより)

リーダブルコードより

フォーマット規約一例

GoogleC++フォーマット規約
クラス名 CamelCase
ローカル変数 lower_separated
定数 kConstantName(CONSTANT_NAMEでなく)
クラスのメンバ変数 offset_(最後にアンダースコア)
JavaScript; The Good Parts』
  • コンストラクタは大文字、通常の関数は小文字で始める
var x = new DataPicker();
var y = pageHeight();
  • jQueryのライブラリ関数を呼び出した時は変数名の頭に$をつける
var $all_images = $("img");
var height = 250;
HTML CSS
  • idの区切り文字にアンダースコア、classの区切り文字にハイフンを使う
<div id="middle_column" class="main-content">

誤解を招く名前を避ける

  • filter()→選択するならselect()*1、除外するならexclude()
  • Clip(text, length)→最後からlength文字削除する(remove)か、最大length文字まで切り詰める(truncate)か
    • →Truncate(text, max_chars) lengthをやめ名前に単位を付ける
  • 範囲はfirst-last(firstからlast以下)、包含/排他的範囲はbegin-end(beginからend未満)
  • ブール値
    • 頭にis has can shouldなどを付ける方法
    • 後ろに?を付ける慣習 authenticated? (Ruby Scheme)
    • 後ろにpを付ける慣習 authenticatedp (Lisp)

コメント

TODO 後で手を付ける
FIXME 既知の不具合がある
HACK あまり綺麗じゃない解決策
XXX 危険!大きな問題がある
todo(小文字) 小さな問題
maybe-later 小さな問題 後で直す
  • 定数の値を決めた時考えていたことをコメントに記録する
  • 情報密度の高い言葉を使う
  • コメントに実例を付ける

変数・メソッド

  • 変数のスコープを縮める メンバ変数 str_ → ローカル変数 str
//条件式でinfoを定義することにより、infoのスコープをif文に限定
if (PaymentInfo* info = database.ReadPaymentInfo()) {
  cont << "User paid: " << info->amount() << endl;
}
//外側の無名関数が内側の関数を返すことにより、submittedを内側の関数だけがアクセス可にする
//『JavaScript: The Good Parts―「良いパーツ」によるベストプラクティス』
var submit_form = (function () {
  var submitted = false; //※以下の関数からしかアクセスされない

  return function (form_name) {
    if (submitted) {
      return; //(二重投稿禁止)
    }
    ...
    submitted = true;
  };
}());
    • 内でJavaScriptではvarを付けていない変数はグローバルスコープに入るので注意
  • 変数に書き込むのは一度限りにする。あるいはconst finalを使って変更不可にして変動し続ける変数を排除する
  • メソッドを出来るだけstaticにする(メンバ変数と関係なくなる)

*1:extract(抽出する)というのもありかも