Hatena::Groupdpmintkeyword

静的型付けか動的型付けか

静的型付けか動的型付けか

ありがちなダメプログラマー「静的型付けか動的型付けかの議論が気になって仕方ない」

で、特に静的付け勢力のほうに見られる傾向。

プログラミング言語は宗教と言われていたけど、今は個人がいろいろな言語を組み合わせて使うようになったせいか静的型付けか動的型付けかで対立することが多いみたい。

大抵は静的勢力が攻撃側。(でもJavaScriptC#は叩かない)

の必要性にはうるさいのに、自分が書くコードではざっくりとした付けしかしていなかったりする。えばインジェクション防止のためのエスケープ処理の前後でを区別せず、StringStringの処理にしていたり。システムを崇拝するなら処理後のくらいは分けないと「何のためのだよ」とか「言ってることとやってることが違う」と言われかねない。


:t/Prog



ありがちなダメプログラマー「型の無い言語というものが存在すると思っている」

を特定せずにデータを扱えるならそれは魔法。

昔の話だとVisualBasicでVariantを使うと「を明示するように」とか言われたりしてた。→ なんでも明示する? 「内部」というのを知らない。他人のコードを読むときはまず"Option Explicit"が書かれているかから見る。(このオプションはコードを書くためのもので、読むときは無意味なのに)


:t/Prog



ありがちなダメプログラマー「なんでも明示する」

スクリプト言語という言葉がまだあった時代よりもさらに昔のことだけど、今でもあるのかも知れない。

何でも明示するのがきちんとしていてコントロールできていてバグを生まないコードだと信じている。デフォルト値は使わない。デフォルト値が変わったら対応しなければならないわけだけど、要するにライブラリの開発者を信用しないということ。


自明なものは明示しないのが基本。明示するのは必要な物だけ。


:t/Prog



ありがちなダメプログラマー「静的型付け言語を信奉しているくせに、型について無頓着」

for (var index = 0; index < anyArray.length; ++index);

上記のようなよくある条件文に違和感を覚えないなら、あなたは動的付け派。

なぜなら…

  • index指定がない
  • ++index+1されるとは限らない
  • <では小数を考慮していない
  • 正しくはindex <= anyArray.length - 1

…とかいうのは違和感以前に間違いなのでどうでもいい。


違和感を持つべきは…

  • indexとlengthを比較している点

位置と長さは違うから?序数と基数の混同?…いやいや単に単位が違うだけ。

1位+1m=???と一緒。ただし、それも定義さえあれば計算は可能で、その定義こそがの定義。index < anyArray.lengthは定義を省いてつじつま合わせをしているだけ。実質はindex <= anyArray.length - 1なんだけど、それにしたっての違いは解決できない。まあ動けばいいという考え方。C#だったら初期化時にが決まるので、整数操作では整数だけ考えとけばいいとも言えなくもないけど「0から9まで」を「0から10未満の整数まで」と表現するのはいかがなものか。


というわけで、静的付けを支持するならindexとlengthを比較するようなコード動的付け風であることを認めて、静的付けを持ち上げた後には必ず「でも動的付けも必要だよね」と付け加えるようにしないとね。


:t/Prog