へっぽこびんぼう野郎のnewbie日記

けろけーろ(´・ω・`)!

読みやすいコードにしようと心掛けて書いていたときに気付いたこと備忘録

コピペは便利だが、とても恐ろしいツールであること

どうしてもそういうことをしたいときは、コードスニペットを使うと失敗しにくい。

def xxx_yyy(): return 'hoge'
 ↓ コードスニペット
def xxx_##1##(): return ##2##

ただ、コピペは最終手段のアルティメットウェポンである。

コピペできるときは、必ず共通化できること

「共通化するかしないか」「共通化が難しいか難しくないか」ではなく、「可能」である。
if文1行でも、それが全く同じ内容で、3個も4個も10個もあるなら共通化したほうがいい。
修正時に鬼のようにキツい。10個とか、

「どうしてこんなになるまでほうっておいたんだ……!」

という感じ。
共通化すると自由度もあがるし、たのしい。

制限するような作りのコードを書くと、どんどん制限がかかっていき、最終的に何もできなくなるゴミコードが完成すること

『これをするためだけにこう書いた』というコードは、それしかできない。
Reusableインタフェースを実装するとかんがえながら書くと、うまくいってることがおおい。

テクいことをすると複雑化すること

『うっはwwこんな書き方してできたったわwwおれ天才すぎわろたァwwww』というのは、実にいい気分になる。
ただそういうことを繰り返していると、いずれ『テク』が通用しなくなり、
『黒魔術』が必要になり『闇魔法』が必要になり、『禁呪』が必要になり、『究極完全ウルトラ超絶すごいパワフル魔法』が必要になり、最終的に『無理』になる。

技術的負債は返済すること

人がつくった負債すらも返済していくスタイル

データ構造をしっかり考えれば、その後はあまり考えなくてもきれいなコードを書けること

データに適したデータ構造をつかう

メソッドは「状態を変更する」ものであること

メソッドに状態をたくさん持たせるような構造にすると、変更がきかず、共通化も困難になる。
メソッドの中身は、外から変えられない。(黒魔術を使えばできる)

コメントには意図を書くこと

コメントには、「なんでこのようにコードを書いたのか」という意図を書く。
意図とコードが間違っていれば、間違っていることがすぐにわかる。
「間違っていることがすぐにわかる」ということは莫大なメリットを持つ。

if user.is_ultra(): # ユーザーがウルトラだったら

 ↑ 非常によく見かける

if user.is_ultra(): # ユーザーの権限がスーパーユーザーより強いとき

 ↑ こっちのほうがマシ

似たような英単語ばかり使わないこと

みんなget大好きなので、ダンディ坂田族と個人的に呼んでいる。

def take_data_from(body_of_girls):

def transfer(monster_data):

def pick_first_user():

読みやすく書くと、あたま使わなくてもスラスラ書けるのでらくなこと

難しいところに注視できる。

サードパーティにたよりすぎると、わからなくなったりできなくなること

完全に隠蔽されたサードパーティや、信頼性の高いサードパーティ、拡張しやすいサードパーティでない場合、
その場はいい感じに達成できても、のちのち困ることが多々ある。
なぜなら多くのサードパーティは、特定の目的を達成するために作られたものであり、
それがゴールで、それ以上を作ろうとしていないから。

いろんな人のコードをいっぱい読むこと

オープンソースおすすめ。
ただしオープンソースも結構ソースがぐちゃぐちゃなこと
Djangoのソースもあまり綺麗ではなかった。

いろんな言語を覚えること

特にCはよく使われているので、わからないと読めないソースとかがおおい。
GitはCで書かれているので、Cがわからないと逆立ちしても読めない。
Pythonも標準のものはCで書かれているし、PHPもそうだ。

物怖じしなくてもいいこと

「わからなそうだから理解放棄しよう」は最大の敵であり、『コピペ勧誘』の強い味方である。
わからないことをひとつひとつ解決していって、遠回りでもわかるようにしていくことで、技術力が身についていくのだとおもう

基礎はだいじなので、基礎をやりまくること

「そんな書き方あったのか!」というのは、たまたまそういう書き方を知らなかっただけのこともあれば、基礎不足から生じることもおおい。
「知っていればあたりまえに書ける」ことでも、知らないと相当苦労してとんちんかんな書き方をしてしまうこともある。

基礎、基礎、基礎、そして基礎。基礎はだいじだなとおもった。

自分が書いたコードを何回か見直す

1回見なおしただけで、恐ろしいほどのミスが見つかる。

おもしろいことに、エディタで見ていても見つからず、GitHubに上げてから気付くことがおおい。
見た目が変わるから、視点も変わるのかもしれない。

  • こうしたほうがよかった
  • ここまだできてないじゃん
  • ここどうやってやればよかったんだろう

そういう反省たいせつ。