第14講: 映画『メメント』に学ぶコーディングでかなり重要なこと

コードを書くときに、コード以外にも書くべきものがあります。
それが、コメントです。(別に『メメント』とかけてるわけではない笑)
どの言語でも、コメントの記述法は要チェックです。
***

こんにちは。
食事で 糖質の重さ>タンパク質の重さ がtrueとなるとお腹がゆるくなる、黒田道哉です。

まずネタバレ無しで、映画『メメント』の話

メメント』という映画、ご存知ですか?

TSUTAYAさんでは大体、「洋画サスペンス」のコーナーに「これおもろいで!」って感じで面陳してあると思います。

- YouTube
YouTube でお気に入りの動画や音楽を楽しみ、オリジナルのコンテンツをアップロードして友だちや家族、世界中の人たちと共有しましょう。

 

監督は、クリストファー・ノーラン。
インセプション』と『インターステラー』の監督ですね。
最近だと『TENET』もそうです。

ちなみに、
『インセプション』も『インターステラー』もめちゃくちゃおもしろいです。

ノーラン監督の映画は、すごい頭を使う、1回じゃ意味分からない系映画なんですよね。
多分、観るだけでIQ上がります。笑

どっちかしか観れないなら、まずは『インターステラー』ですかね。
わかりやすいし、5次元空間を映画という4次元空間で表現したところが天才だと思います。

 

メインの『メメント』についてネタバレなし!で解説すると、

主人公はある事件を境に、短期記憶が保てないようになってしまいます。
長期記憶はあるので、言葉も喋れるし、自分が誰だったかもわかります。

でも、短期記憶を保てないので、その事件の日から新しい記憶が出来ません。
つまり、事件の日以降に起こったことは全て寝る度に忘れます。

 

朝起きる度に「ここどこ?」から始まります。

 

それどころか、目が覚めている状態であっても
5分置きぐらいに「ところで今何してたんだっけ?」状態です。

敵から逃げて走っている最中にも、あれ、何で走ってんのかな?と止まりそうになってしまいます。笑

 

だから、忘れないうちに覚えていることを都度メモしておきます。

友人のことも覚えていられないので、出会った日にポラロイドカメラで顔を撮ります。
その写真に、その友人の名前と、どんな人物かをスグにメモしてポケットに入れておきます。

 

そんな状態になりながらも、何故生きてるかというと、復讐のためです。

人ご●しのためです。

自分のことをこんな風にした犯人であり、愛する妻をレ●プして殺した犯人に復讐するためです。

 

その事件、その復讐自体も忘れてしまうといけないので、
自分の身体にタトゥーとして彫り込んでいます。

 

そして犯人の手がかりが分かれば、その都度タトゥーを入れていきます。

「奴のイニシャルは*.*」

みたいなタトゥーです。

 

 

ある朝、モーテルの一室で目覚めます。
もちろん、何故ここで寝ているのかわかりません。

 

思い出そうとメモを探していると、急に「ジリリリリ!」と電話がかかってきます。

かけてきたのは、犯人探しに協力してくれている警官のようです。

 

メモやタトゥーを見ながら電話でいろいろと情報交換しているうちに、傷が痒くなってきます。

その傷は、昨日入れたばかりのタトゥーです。

ガーゼがしてあります。

 

もちろん、そこにも重要な情報が彫ってあるはずです。

何だったかな?と、そのガーゼをめくってみると…

 

 

 

 

 

電話には出るな

 

 

 

と彫ってあります…。

 

 

何が言いたいねん!?

何が言いたいかというと、

メメント観ましょう!ってこと

…ではなくてw、

 

プログラムにも、メモを残しましょう!ってことです。

 

あなたが、この映画の主人公ほどの記憶喪失を持っておられるなんてことは、(確率的な意味で)ないかと思います。

 

でも、
どんな人だって2週間もすれば、ほとんどの記憶はないはずです。

 

きっと誰もが、毎日毎日、次の食事をどうするか、頭をひねっているはずです。

 

「外で食べる?買って帰る?家にあるものでなんとかする?」

 

少なくともその瞬間は一生懸命考えてますよね。
なのに、2週間経てば、何を食べたか忘れています。

 

 

コードもそうなのです。
その瞬間に一生懸命書いていて、

「こういうロジックやねんからこう書くしかないやろ!」

と思っても、
数週間経てば、なんでこう書いてあるのかわからなかったりします。

メメントってしまいます。笑

 

数週間どころか、
中には「あさっての自分は別人」と考えるプログラマーも居るんですから。

 

そんなことも想定してか、プログラミング言語には「コメント」という機能が備わっています。
プログラムにメモすることができる機能です。
プログラムとしては読み込まれません。

つまり、パソコンちゃんはそれを無視します。
読めるのは人間だけ。そんな機能です。

 

コメントはどんなときに使うの?

コメントを使うのにオススメなタイミングは、ザックリ2つあります。

おすすめタイミング1:困りながら解決したとき

1つはもちろん、重要な情報を伝える場合です。
未来の自分がメメントっても大丈夫なようにですね。

具体的には

頭を悩ませて、時間をかけて書いたコードには
何故困ったか、メモを残す

と良いでしょう。

 

姥(うば)捨て山」の話みたいなイメージです。

年取ったお母さんをもう世話してあげられない、ということで、
子供がお母さんを背負って山に捨てに行きます。

子供は母を背負いながら、険しい山道を登っていきます。

 

背負われながらも、お母さんは手の届く範囲にある木の枝をポキポキと折って落としています。

子供がなんでそんなことすんのや?と聞くと、

 

 

この木の枝を目印に、
あんたがきちんと帰れるようにや

 

 

と答えたという話です。

 

コレと同じように、きちんと、思考を追えるようにしましょう。

 

他にも、何らかの問題について、ググって対応したところは、

解決策に繋がったURLをコメントとして保存

しておくと、かなり役に立ちます。

 

似たようなコードで悩んだときに、またそこを参照できますし、
もし同じ場所がバグったら、そのURLを読み込んで原因を追求できますから。

逆に、URLを保管しておかないと、
同じ場所がバグったときに、また解決に同じだけの時間がかかるってことですからね。

お気に入りに入れるほどでも無いけど、
かといってまたゼロから探すのはめんどくさいですからね。

 

オススメのタイミング2:バグを探すとき

そしてもう1つのコメントの使い方は、

デバッグ

です。そう、バグ探しです。

どこにバグってる箇所があるのか、コメントを使って探していきます。

 

「え?どういうこと?」

 

コメントにしたところは、プログラムとして読み込まれないのでした。

ということは、

一生懸命書いたコードを、いちいちバックスペースで消すなんてことをせず、
コードの一部分をコメント化してしまえば、無効化出来ます。
聖なるバリアミラーフォース!

 

こういうのを「コメントアウトする」といいます。

 

バグの疑いがあるエリアだけ生かしておいて、それ以外のエリアをコメントアウトすれば、
疑いのあるエリアの動作だけを確認できます。(コードを消すことなく!)

なぜそんなことするかというと、余計な処理に時間をかけたくないからです。

例えば、

A→B→C→D

という流れがあるときに、
BからDまでをコメントアウトすれば

A(→B→C→D)

Aの挙動だけ確認できますよね。

もしコメントアウトしなければ、
Aの処理が終わった後、B→C→Dの処理が終わるのも待たなくてはなりません。

 

これに関しては、
色々コードを書いて、バグって…とやっていく上でわかってくるのかもしれませんから、
今はわからなくても大丈夫です。

 

でも、

コメントアウトを駆使してバグの発生箇所を絞っていく

ってことは覚えておいてください。

もちろん、
以前お伝えした、二分探索法・printf作戦と矛盾するものではないので、
連結させて使ってもらっても大丈夫です。

 

 

コメントの使い方は?どうやって使うの?

どうやって使うねん?ってことなんですけど、
だいたい、どのプログラミング言語にも、2種類の書き方が用意されています。

1つは、「1行コメント」。
もう1つは、「複数行コメント」です。

 

たとえばPythonだと「#」マークをつけると、
そこから後ろがまるまるコメントになります。

たとえば、

divmod(10, 9)#divmod(10, 8)
divmod(10, 7)
divmod(10, 6)

というコードがあった場合、divmod(10,8)は無視されます。

つまりPythonちゃんの目には

divmod(10, 9)
divmod(10, 7)
divmod(10, 6)

だけが見えています。

これが一行コメントです。

実際にコメントを入れるときは、

# divmodしまくる
divmod(10, 9)
divmod(10, 8)
divmod(10, 7)
divmod(10, 6)
# TODO: forループにしたい(時間があるとき)

みたいな感じで書きます。(コメントの内容は適当w)

 

 

複数行コメントは、Pythonの場合は「”’」(シングルクォート3つ)で囲んだエリアがまるまるコメントになります。

divmod(10, 9) ''' divmod(10, 8) divmod(10, 7) divmod(10, 6) ''' divmod(10, 5)

は、divmod(10, 8)からdivmod(10, 6)までがコメントになります。

Pythonちゃん視点で言うと

divmod(10, 9)divmod(10, 5)

だけが見えていて、実行してくれます。

 

ちなみに、(今日のエンジニアジョークの伏線)

C言語であれば、

一行コメントは「//」から後ろ全部
複数行コメントは「/*」から「*/」まで

です。

 

 

 

ということで、

コメントを書く癖をつけよう!
しかもコメントはデバッグ(バグ潰し)にも使える!

というお話でした。

次回予告

次回はいよいよ、最終回…。

旅立ちの日です。

はなむけとして、相性ピッタリなスクール選びのコツを、
黒田の実体験を交えてご紹介します。

最終講: スクール選びのワル知恵。相性ピッタリなスクールに出逢う方法
あなたにピッタリのプログラミングスクールを選び出す”ワル知恵”を元システムエンジニアが伝授します。実践して、相性ピッタリのスクールに出逢えると、本当に人生が変わります。

 

おまけ1:今日のエンジニアジョーク

 

次の講座へ。

最終講: スクール選びのワル知恵。相性ピッタリなスクールに出逢う方法
あなたにピッタリのプログラミングスクールを選び出す”ワル知恵”を元システムエンジニアが伝授します。実践して、相性ピッタリのスクールに出逢えると、本当に人生が変わります。