みなさま。

こんにちは。初めまして。ITSS事業部松浦と申します。

この度私事ですが、単身赴任の寂しさを癒す為と、業務以外コンビニぐらいでしか会話しないという現状を憂い、諸々発散の場としてブログを書かせて頂く事にしました。2か月に一度程度、お目汚しをさせて頂きたく、よろしくお願い致します。

弊社ブログには、大きく事業部ブログと個人ブログのカテゴリがあり、ブログルールとして、個人ブログはある程度自由に、徒然と書いてよい、とされています。この文章も個人ブログにカテゴライズされます。

それを踏まえ大事な初回、さて何を書こうか、しばし考えました。
横浜に単身赴任の47歳児、晩御飯はビール、トイレしつけ済みの、僕の日常に興味を惹かれる方など微塵も存在せず、優秀なサイコメトラーでさえ共感に苦心する体たらくです。挙げ句僕のハートに住んでる金魚ちゃんにすら見限られている現状を鑑みるに、恐らくは、僕の日常を綴るというものは全く需要がないと判断されます。
【悲報】”ハッピーな生き様 晒しな日記 (更級日記にかけてる / 多分大爆笑)” 制作中止のお知らせ。

ぶっちゃけた話、僕自身もそんなおっさんの愉快な日常なんて、金貰ったってミリも読みたくありません。

となると、やはり、ここはひとつエンジニアっぽい感じを漂わせつつ、小賢しい言葉を並べて、なんとなく凄そうな雰囲気で煙に巻く作戦一択となります。

基本コンセプトを、”ITっぽい単語をまぶした世間話” として、小難しいIT用語をいかに無関係などうでもいいことに昇華できるか、そこらへんが見どころとなる予定です。痒いところを少しだけ通り過ぎた、自社検閲ギリギリをチョップして行く気概で頑張りたいと思います。読後感も潔いほどゼロとなる見込みです。

※ お ね が い
ここから先、あくまで個人ブログであるというのを前提に、ガチなエンジニアの方々におかれましては、乾いた笑いと共にご覧になって頂ければ幸いです。また、これからエンジニアを志す方々におかれましても、反面教師的なポイントを見出して頂ければ、それもまた幸いです。
あとはー、そうですね、駆け出しの方が、【遅延評価】 なる単語だけ覚えて、どこかでしたり顔で知ったかカマした上で、後々調べなおした時に顔が真っ赤になるぐらい恥ずかしくなってくれたら、それはそれは、もう、望外の喜びです。

いいかい、若いの。気になった単語は鵜呑みにせず、自分で調べるんじゃぞ。

今回のお題  ~【遅延評価】 をネタにダラダラと書いてみる ~

「そうそう、これな、この、鼻をくすぐる香りとー、蓋を開けた瞬間にひろがる……って、入ってないやないかーい!」

はい、遅延評価です。 なにが? って、逆に何が? 遅延です。遅延評価です。
待って待って、大丈夫。まだ全然大丈夫。慌てる時間じゃない。トラストミー。話を聞くんだ。
つまりですね、【評価】を【遅延】するんですね。

この悲しみすら感じる、うすら寒い乗りつっこみのどこらへんが遅延評価なのか、正直微妙な気持ちになってきました。この気持の沸き上がり方、タイムラグも遅延と言えますが、内容的に評価に値しないので遅延評価とはなりません。ここはひとつ、気持ちを強く持って、説明させて頂きます。

乱暴に言うなら、例えばあるものに対して、必要になった瞬間に状態が評価される、ってのが遅延評価です。必要となるまでは、変数の状態には一切関知しません。数字だと思って足し算しようとした瞬間に、中身が英字だったのが判明する、とかですね。
「えっ、まじ? うっそ?! いやいや、どっから英語が?、2 + B ? え、なに? 2B? 鉛筆の濃さとか? フォントで言うとこんぐらい? あれ? 俺ちょっとウマい事言ってね? HAHAHA! OH ☆ YES!」 みたいな。

全然ウマくない。みたいな。

そんなコーディングをしたらソッコーでお払い箱になっちゃう。みたいな。

おいおい、遅延評価ってのはな、ホントはそんな単純じゃないんだよ、ってお話は重々承知しております。再帰がどうとか、無限循環がなんちゃらとか、ええ、もう、それはもう。ですが、あくまで対象PG年齢1歳を目安として。じゃないと面白おかしく書けないじゃん。難しい話は事業部ブログの方で。いずれ。誰かが。

そんなわけで、ものすごく雑に言ってしまうと、遅延評価の場合には、箱を開けるまで何が入っているかわからない、ということになります。ひょっとしたら何も入ってないかも。

今現在の僕の周り、という前提ですが、無意識で使っている場合を除き、能動的にコーディングされた遅延評価はまだまだマイナーだという印象です。用途にもよるしね。
ある処理を実現するために使用した機能の副次的効果として遅延がある、というような具合ですね。たまたま遅延ってます的な。
なので、まあ、普通にコーディングして、結果、普通に先行評価となるものが大半で、だから、普通にふざけた値がセットされると、その都度エディタさんが真っ赤になって叱ってくれます。「お前、それ、数字入れるとこやないかい! なんや! ”A” とか、オマエ 16進数きどりか? ああん?!」 とかって。普通ですね。
ものによっては ピコーン ♪ みたいな恥ずかしい音とか、ババン! みたいな海賊王チックな音が鳴ったりもします。
この音、マジで、ホントにカンベンしてほしい。PC借用したら最初にミュート確認するもんね。

バーンとか鳴って 「おっ? これはこれは。さては、やらかしましたな? デュフw」 とかね。うるせえ、こっち見んな。黙れ。

プログラム、アプリ、ソフト、とにかく、いわゆる 【動くもの】 をこしらえる最終段階までエディタさんが、親切さとか、お節介さの程度の差こそあれ、先行評価で叱り飛ばしてくれるというのは、実に、本当にありがたいことです。正直時々イラっとするけど。
でもね、あとあとになって出来上がった犬小屋にね、アホほどでっかいグリズリーとか入ってたら、なんか天使のような寝顔でスヤスヤしてたら、やっぱ、びっくりするもんね。なので、熊が入りそうなことをやらかそうとしたら、律儀に都度叱ってくれる、これが先行評価です。 「お前、これ、どんだけデカいチワワ小屋やねん! 標高何チワワやねん! こんなん、熊とか入るわ!」 流石エディタ様。まこと、おっしゃる通りでございます。

さて、例えば、顧客から以下の仕様で仕事を依頼されたとします。

< 要求仕様 >
・A – Z という犬が入っている箱がある。
A から順に開けていって、柴犬が入っていたら”シバザキ”と名付け持ち帰る。(背番号は #10 代表では #7 とする)
※ 秋田犬だったら”アキタ”と名付けるのも想定されたが、良い選手だったとはいえ、少し前の世代なので今回のリリースでは考慮外とする

エンジニアは「犬、勝手に持ち帰っていいのかしら?」とか思いながらも、客先要求なので仕方なくプログラムを作ります。予防接種とか、マイクロチップとか、昼間はアスファルト熱いから散歩させちゃ駄目だよとか、そんな事を考えても仕方ありません。仕事なのだから。でも、まかり間違って、もしも僕が持ち帰ってもいいって話になったら、せめて背番号ぐらいは決めさせて欲しいなあ。

それでは遅延評価で作成したプログラムを動かしてみましょう。

パカッ わんわん! (秋田犬)
パカッ わんわん! (チワワ)
パカッ にやー!
パカッ (空)
パカッ 「か、かあさん?! かあさん……そんなとこに……! おのれ-!」
パカッ わんわん! (訳:ごきげんよう。柴犬です) ⇒ ハロー、シバザキ。ミッション・コンプリート

以上。ご清聴ありがとうございました。

とはなりません。当然プログラムを作る側が、箱には犬しか入らないように細心の注意を払う必要があります。【犬が入っている箱】 という前提にも関わらず、「にゃー!」 ってやった時点で、エンジニアは目の前がすっと暗くなるのを感じます。
「いや、あれっ? 自社で検証した時にはちゃんと! わんわん! わんわん! って! ええ、もう、天高く、わんわん! って! わんわーん!」
困ってしまってわんわんわん。血を吐くようなハウリングも、現場では一切通じません。ふたつ先に仕込まれたかあさんは、日の目を見ずお蔵入りとなります。グッバイ・マザー。フォーエバー・マザー。きっと、このプログラムを作成した彼・彼女には犬猫カフェとかが天職かもしれません。

アホか、って思いました? おめでとうございます。正常です。

でもね、遅延評価に対してふざけた拡大解釈すると、こんなことにもなりかねないってお話です。

「え? じゃあ、遅延とか、あんまいらなくね?」 ってなりますよね。
「だって、俺、おっちょこちょいだし、間違ってウサギ小屋にジャッカルとか、海苔の佃煮とか、下手したらレスラーなんかも入れちゃうかもしんないし。やっぱ、エディタに叱って欲しいわ。叱られるって言っても、現場の上長より全然怖くないだろうし……」
そうですね。よくわかります。

これじゃあ遅延評価の何が良いのかさっぱりですよね。生き別れた母親が紛れ込んでる可能性があるってのは、まあ、良いと言えば良いのですが、少なくともこの件に関しては違います。だって犬前提なんだもん。いきなり猫とか、正直困るし。
結局この件で遅延のメリットっていうのはなんだろう、ってお話です。ここんとこを気にしてほしいんです。ちゃんとメリットがあるからこそ遅延評価という考え方が生まれたんです。

「でもさ、なんか【猛犬注意】って書いてある箱からさ、友達のかあちゃんが満面の笑みで飛び出てくるしで、俺、もう、わけわかんねえよ」

おっしゃる通りです。じゃあ、括目。仕方ないので、遅延評価のメリットをご紹介しましょう。わかり良いところで、ずばり【評価】を【遅延】させるのが良いところなのです。

まんまですね。

一つ一つの箱に対して 【犬】 が入っている、という評価を、先行で、全ての箱に、こっそり確実に行っているとしたら、これは、なかなかに大変な仕事です。でもしょうがない。先行評価なんだから頑張ってやりましょう。この犬箱が増えれば増えるほど、コストは跳ね上がっていきます。パソコンの中の小さな妖精 (見た目:中年 / 好物:第3のビール) たちもざわざわ始めるしで、もう、てんやわんやです。
ところが遅延評価の場合、必要になってから 「こう、犬を取り出しましてー (犬が入っているとは言ってない)」 とやるので、箱に対して 「開けるかどうか定かではありませんが、こちらには、もう、絶対に犬が入っておりまするで候。バッチリ。100パー。ホント。俺、何回も見たし」 というコストをかけずに済むのです。

「先月に作っていただき導入しました、【the shibazaki】 なかなか良い評判が良いです。ありがとうございました。そこで、次回は犬の箱10万と猫の箱30万でやっていただけないでしょうか」

おいおい、ぶっこんで来たな、お客様。先行評価の増え続けるコストに、パソコンの妖精 (最近肉の脂が胃に堪える) たちもげんなりです。パソ妖精 (最近階段が辛い) みんなで頑張っても犬箱20までしか耐えられないとしたら、100,000 の犬箱と 300,000 の猫箱という現実にパ妖精 (最近γGDPが気になる) たちは、ストライキを目論むかもしれません。

翻って、遅延評価の場合には、評価は本当に必要になった時だけなので、それまでは飲んだくれててていいんだよ、となります。他に仕事がないならね。必要になってから初めて箱をパカパカして、「はいよ、犬」 とやります。上手い事早々に柴犬が出てくれようものなら、残った箱のことは知ったこっちゃありません。隠れているウォーリーには本当に申し訳ないけど、まとめてポイです。せいせいしたぜ。いい夢見ろよ。
妖精 (最近自分の知らない家族グループラインがあることを知った) たち的にはこっちを推したいと申しております。
「牛でも馬でも、好きなもん飛び出させりゃいいじゃん。それが嫌なら出ないように工夫しな」

だらだら書きましたが、もちろんこれだけで遅延評価を語れるとは思っていません。メリットとデメリットを正しく理解する事が前提であることに変わりありませんし、もっと言ってしまえば、これだけ書いた 【遅延評価】 の世間話が、今後深く理解していく上で全くの邪魔となってしまう事も、当然ありえます。むしろそっちの可能性のが高いかも。
でも、いいの。コンセプトは世間話だって予防線張ったし。僕、悪くないし。

【遅延評価】って単語だけ覚えて、今日のところは良しとしましょう。いずれ知ったかぶりに使えるかもしれません。

でね、自分の武器を増やすという意味では、目的の、行わなければならない処理に対して、例えば 遅延 / 先行 評価ひとつとっても、その効果を吟味して、意図的、能動的に使ってみる事が大事なんじゃないかな、と個人的には思います、っていうだけが、このお話のオチです。かあちゃんが飛び出してきたっていいじゃない。いつか笑い話になるはずです。
まずは考えて、使ってみる。それは、数多くの選べる方法から、何故自分はこのやり方を選んだのか? という自問に繋がってくはずで、繰り返される自問が、いずれ自身のアーキテクチャの礎となってゆくんじゃないかしら、なんて思います。…… たぶん。

あ、ちょっと偉そうな感じでまとまりそう。

どうでしょう? プログラムに興味のない方にこそお伺いしたいのですが、日常生活で遅延評価を行った方が良い事例とか、あるいは、「これこそ遅延評価である」 という事例、何か思いつくでしょうか?

例えば、この文章をしょうもない駄文だと評価するのは、駄文と切り捨てることが人生にとって本当に必要になってから、とかでしょうか。