設計およびコーディング時のルール
おれ流。
- インデントはスペース×2 (Mojolicious, Railsはスペース×2)
- 空行にはインデントなし (Mojolicious, Railsはなし)
- 1行は最大80文字
- コメント識別子(# とか // とか)の後ろ、スペース×1
- ファイル末尾の改行あり
データベース
- テーブル名は単数形で。
カラム名 | 説明とか |
---|---|
id | プライマリキー |
lock_version | 編集バージョンキー。AさんとBさんが同時更新をかけないように。rails由来 |
position | ソートキー。rails由来 |
created_at | 作成日時 |
created_by | 作成者。user_idが入る |
updated_at | 更新日時 |
updated_by | 更新者。user_idが入る |
カラム名 | 説明とか |
user_id | userテーブルへリレーション |
user_count | userテーブルの関連レコード数のキャッシュ |
name | 名前 |
name_en | 名前アルファベット表記 |
title | |
key | アルファベットのみ。インデックス張りがちな値 |
value | |
account | |
xxxxx_at | 日時が入る |
xxxxx_by | user_idが入る |
xxxxx_date | 日付が入る。YYYY-MM-DD |
xxxxx_time | 時間が入る。hh:mm:ss |
memo | メモ |
comment | コメント |
remark | 備考 |
is_deleted | 削除フラグ(deletedだけだと日付が入ったりしそうなので) |
postfix
_id | 整数のみ。他テーブルへの参照キー |
_key | アルファベット含む |
_at | 日時 |
_by | たぶんユーザID |
_name | 名 |
_title | タイトル、ラベル |
_text | 改行を含むテキスト |
_value | わかんない。キーに対して? |
NULL/デフォルト値
- NOT NULL制約をなるべく付ける。
- デフォルト値NULLをなるべく避ける。
- NULLとゼロと空が重複して存在して欲しくない。
以下、可能であれば。
- 文字列なら「(空)」。
- NULLと空を区別したい時のみNULL可とする。
- 空がまずいなら「未定義」。
- 数値ならゼロ。
- 日付なら「0001-01-01」、第二候補「9999-12-31」。
- フラグならゼロ。
- 右/左/未入力なら、1/2/0とか。
メモ
- MySQL の InnoDB は外部キー制約をサポート
メソッド名
# 他動詞 find data # 副詞は動詞の後ろ?(前の場合もある) deleteDirectoryRecursively() findStrictly() # 過去分詞は形容詞になる sent message 送信済みのメッセージ deleted rows : 削除された行(削除行) duplicated rows : 重複した行 nested list : ネストしたリスト distributed processing : 分散された処理(分散処理) supported OS : サポートされたOS defined function : 定義された関数(定義関数) selected row : 選択された行 # 現在分詞も形容詞に existing file 存在しているファイル # 接頭語、接尾語 pre+動詞 prepend、preprocess re+動詞 redo、redeploy 名詞+ize serialize、Romanize、camelize、normalize、parameterize 動詞+able serializable、sendable、comparable
Google JavaScript Style Guide
→Google JavaScript Style Guide 和訳 — Google JavaScript Style Guide 和訳
node.js
→Felix's Node.js Style Guide(和訳)
- インデント: スペース×2、文末セミコロンあり、1行80文字、シングルクォート(JSONではダブル)、変数「adminUser」(×「admin_user」)、クラス名「BankAccount」、定数「SECOND」
// パーレンの前後のスペース、ブレスを開いて閉じる揃え方 if (true) { console.log('!'); }
// 1行で1宣言 var a = 'aaa'; var b = [12, 23]; // NG var a = 'aaa', b = [12, 23];
// いったん分かりやすい名前付ける var isAuthorized = (user.isAdmin() || user.isModerator()); if (isAuthorized) { console.log('winning'); } // NG if (user.isAdmin() || user.isModerator()) { console.log('losing'); }
HTML5
jQuery
→JavaScript Style Guide | Contribute to jQuery
Cocoa(Apple)で許可される略語
→Acceptable Abbreviations and Acronyms
- alloc(Allocate), alt(Alternate), app(Application), calc(Calculate), dealloc(Deallocate), func(Function), horiz(Horizontal), info(Information), init(Initialize), int(Integer), max(Maximum), min(Minimum), msg(Message), nib(Interface Builder archive), pboard(Pasteboard), rect(Rectangle), Rep(Representation), temp(Temporary), vert(Vertical)
- ASCII, PDF, XML, HTML, URL, RTF, HTTP, TIFF, JPG, PNG, GIF, LZW, ROM, RGB, CMYK, MIDI, FTP
ネーミング全般
- Naming -名前付け- - Qiita
- Rails - プログラマなのに知らなかったら恥ずかしい英単語集 - Qiita
- 設計 - クラスの命名のアンチパターン - Qiita
- プログラミング - うまくメソッド名を付けるための参考情報 - Qiita
- プログラミング - うまくクラス名を付けるための参考情報 - Qiita
- Main_Page:Wiktionary, the free dictionary(IT系単語多い)
- codic - デベロッパーのためのネーミング辞書(日本語で検索するとネーミング辞書を、英語で検索するとIT英語辞書を検索)
語
aとthe、anyとsome
a
それと別物を置き換えても文章が成り立つ場合。
どれでもいいのが a
the
それでないと文章が成り立たない場合。
それじゃないと駄目なのが thesome に対応するのが the 、any に対応するのが a です。
注意事項その1:固有名詞にはtheをつけない
大文字、すなわち固有名詞になっている場合にはtheはつけない。これは the internet と Internet の場合も同様です。これは、プログラマー的な理解にも合致します。theはいわば「固有化オペレーター」なので、すでに固有化されているものに二重にかける必要はない、というわけ。
ただしこれにもこれまた例外がありまして、「固有フレーズ」の場合はtheを取り除けない。the United States のように。
注意事項その2:作品紹介では a を使う
洋画の冒頭を見て下さい。"a Walt Disney film"だとか、"a Kurosawa movie"とかという表記になっているはずです。極めつけに、"A Fish Called Wanda"なんて映画まであります。 a と the の違いから考えれば、これは the が正しそうに思えますが、なぜかこういう場合は a なのです。
実はこれ、例外というよりは一般原則の拡張でもあります。この場合、"Kurasawa movie"を一つの単語だと考えるのです。そうすれば"'Spirited Away' is a Miyazaki film. The movie won the Academy Award in 2001."という文章でもとまどいません。
スペルミス
元々はindicesのみが正解だったのが、indexesも後に認められるようになった。
matrixも最近ではmatricesと書く人よりmatrixesと書く人の方が多いような気もする。
それと同じ道を歩みつつあるのが、、referer。正解は"referrer"なのだけど、