Help us understand the problem. What is going on with this article?

Hurry Coderと謎のコメント

とあるWeb制作会社にて

社長「なあ、やめ太郎くん」
社長「このPHPファイルを修正しといてくれや」

ワイ「ええで」
ワイ「(JavaScriptしか書けへんけど・・・)」

さっそくPHPコードを読んでみる

ワイ「ふむふむ」
ワイ「なるほど」
ワイ「思った通りや」
ワイ「まったく分からん
ワイ「ハリー先輩に質問しよ」

ハリー先輩とは

  • この会社で唯一のプログラミング経験者
  • まともなコーダーは彼しかおらず、いつも質問責めに
  • 常に忙しいためハリー・コーダー先輩と呼ばれている

質問してみる

ワイ「ハリー先輩、すんません」
ワイ「この関数はどう直したらええんですか」

ハリー先輩「ここはこんな感じや」
ハリー先輩「チョイチョイチョイ、と」
ハリー先輩「後は頼んだで!」
ハリー先輩「あー、いそがし」

直してもらったコードを見てみる

ワイ「なるほどなー、この関数はこう直せばよかったんか」
ワイ「お、なんやこの関数の上のコメントは?」

/**
* blackCompanyFunc
*
* @param Int $n
* @param String $text
* @return String
*/

function blackCompanyFunc ($n, $text) {

ワイ「ふむふむ、第1引数の$nには整数を入れろという意味やな」
ワイ「そして第2引数の$textには文字列を入れればええんか」
ワイ「そして返り値も文字列と」
ワイ「なるほどなー」
ワイ「ちゃんとコメントで関数の説明が書いてあると、後から分かりやすいなあ」
ワイ「最初にコーディングした人ホンマえらいわ」

しかし、よく見てみると

ワイ「あれ」
ワイ「引数$n整数のはずなのに文字列が入ってきとるで」
ワイ「コメントに書いてある事とちゃうで」
ワイ「紛らわしいなぁ・・・」
ワイ「最初は整数を入れて使ってたけど、今回の修正で仕様が変わったんか?」
ワイ「ならコメントも直してくれへんと・・・」
ワイ「先輩・・・
ワイ「忙しいから修正も雑やな・・・」
ワイ「ハリー・コーダーの異名は伊達やないな・・・」

コメントで書いたルールに強制力はない

ワイ「せっかくコメントで引数や返り値に関するルールが書いてあっても、守られてなかったら意味ないで・・・」
ワイ「弊社の闇は深いなぁ・・・」
ワイ「コメントに書いてあるルールを守らんかった場合はアラートが出ればええのになぁ1・・・」

次の日

社長「今日はこのElmのファイルを修正してくれや」

ワイ「ええで(何やElmって)」

Elmのコードを読んでみる

ワイ「ほうほう、ElmいうんはコンパイルするとJavaScriptHTMLを吐き出してくれるAltJSみたいなもんなんか」

func1 x y =
    x + y

ワイ「なるほど、Elmでは関数をこう書くんやな」
ワイ「ふむふむ」
ワイ「何やこの、関数の上に書いてあるコードは」

func1 : Int -> Int -> Int
func1 x y =
    x + y

ワイ「なんやInt -> Int -> Intて」
ワイ「ハリー先輩は忙しくてピリついてるからグーグル先生に聞いてみよ」
ワイ「ブラック会社あるあるやな」

ワイ「なになに、これは型注釈いうもんなんか」
ワイ「このfunc1という関数は引数として整数2つを受け取って、整数を返しますよいう意味なんやって」
ワイ「昨日のPHPにあったコメントみたいなもんやな」
ワイ「なになに、型注釈で書いてあるとおりに引数を渡さんと、そもそもコンパイルが通らへんのか」
ワイ「せやから必然的にコンパイル前に修正することになり」
ワイ「実行時にエラーが出にくいと」

ワイ「・・・これやで

ワイ「これこそワイの求めとった強制力を持つコメントやないか」
ワイ「1人で小規模なプログラミングしてる分には、引数の間違いなんて滅多にせえへんけど、」
ワイ「仕事で複数人でプログラミングする場合はそうとも限らんもんな」
ワイ「せっかく賢い人が書いたコードを、ワイみたいなザコーダーがよう分からずに修正してしまうこともある」
ワイ「そこを型がブロックしてくれるわけやな」
ワイ「型が無い方が好きなもんを渡せて自由度は高いのかもしれんけど」
ワイ「ワイみたいなザコーダーを自由な世界に放つとクソコードが生まれるからな」
ワイ「で縛って貰った方が間違えにくくて安全や」

AltJSええやん

ワイ「AltJSなんて結局JSに変換されるんやから、」
ワイ「JS以上のことは出来ひんのやろ?って」
ワイ「要らんやんって」
ワイ「最初からJSで書くわ!って」
ワイ「むしろワイは脳内でES5に変換してから書いてんねん!って」
ワイ「そう思ってたけど」
ワイ「違ったんやな・・・」
ワイ「コンパイラを通すことで、コードの品質を保ってくれてたんやな・・・」
ワイ「誤解しててゴメンな、AltJS・・・」

まとめ

ワイ「なんて面倒くさいし要らんと思っとったけど」
ワイ「むしろザコーダー達の暴走運転を抑制してくれるガードレールみたいなもんやったんやな」
ワイ「自由に走り回れるより、やっぱガードレールあった方がええわ」

ワイ「そもそも、型が明記されとる方が何を受け取って何を返す関数なのか分かりやすいっていう、」
ワイ「コメント的な役割もあるしな」
ワイ「他の人のコードを読むときに助かるし」
ワイ「自分のコードを見直すときもありがたいな」

ワイ「賢い人たちがよく言う、大規模なプログラミングも型を使って堅牢にっていうんはこういう事やったんか」
ワイ「型、ぱねぇ・・・」

ワイ「あとElmちゃん、むっちゃ易しい

〜終〜

追記: Elm用のAtom拡張機能を作りました

HTMLのコードをElmに変換する拡張機能やで。
こちらの記事で紹介してますさかい、よかったら使うてみてや!

追記2: クラスタを作りました

なもなきくらすたというサイトで
Elm で 型デビュー くらすたを作りました。
よかったら参加してみてください。
(ツイッターにリストを作ってくれるWebサービスです)


  1. ※PHP7からは引数や戻り値の型指定が出来るようになったらしいで! 

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away