アラフォーがお金持ちになるためエンジニア目指すブログ

お金も根性も学歴もないアラフォーまきのがエンジニアになってお金持ち目指すよ!

侍エンジニア塾 5回目の授業①

どうも、アラフォープログラムング超絶楽しいけど早速詰んでるまきのです。

今日は侍塾5回目の授業だったので、早速との記録をしちゃいます。

 

 

課題のチェック

前回の課題はこちらでした。

 

ーーーーーーーーーーーーーーーーーーーーーーーーーーーー

  • 4章  オブジェクト・変数・定数 自習&問題集
  • 5章  判断条件 自習&問題集
  • 6章  繰り返し 自習&問題集
  • 7章  メソッド 自習&問題集
  • 8章  クラスとモジュール 復習&問題集
  • 9章  演算子 自習&問題集
  • 10章 エラー処理と例外 自習&問題集

ーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 

ボリューミーだったのと、8章のクラスでどん詰まりだったので、できたのは4章〜8章半分まで。

 

とりあえずできた課題をレビューしてもらって、その中で「こうするとRubyっぽくてかっこいい!」という書き方をレクチャーいただいた部分を。

 

レクチャー1 1から100までカウントアップ

問題はこちら

 

f:id:MmRevorution:20180928111833p:plain

 

で私が書いたコードがこちら

 

f:id:MmRevorution:20180928112322p:plain

 

これ、実際ちゃんと1から100まで数えてくれるんです。

だけど、if index == 101ってちょっと気持ち悪い。

どうせなら100で終えたい。

 

でも私、「ちゃんと100まで数えてくれた!やったー!」 で満足しちゃった(笑)

ここのあたり頭の悪さが出てるんですが、

単に index > 100でよかったんですよね。

100まで数えて、100超えたらやめてもらう。

 

さらに、このコードだと

出力する

indexに1たす

indexが101になったら処理やめるけどどう?

という流れだけれど、

indexが100より大きいなら処理おしまいにするけど今どう?

まだ100じゃないなら今のindex出力

indexに1たす

の順番じゃないと、処理によっては101まで処理しちゃう場合があるよねってことでした。

 

で、スッキリ&Ruby的にこう書くとかっこいいよってのがこちら

 

f:id:MmRevorution:20180928113514p:plain

 

後置if

処理を先に書いて、ifを後に書く。

さっきと比較するとこのくらい違う。

 

f:id:MmRevorution:20180928114941p:plain

 

後ろにifを置ける。

内容によってはもちろん普通に書くほうが見やすい。

 なるほどー。

 

レクチャー2 偶数か奇数か

問題はこちら。

 

f:id:MmRevorution:20180928115510p:plain

 

お、偶数わかるよ!

前progateやった時、「偶数を出すためには、2で割ってあまりがなければいい」ってひつじ仙人が言ってた!

 

算数・数学が苦手だったまきのは、これがすごい大発見でとっても印象的だったので覚えていました。だから逆にそれを使えば偶数を出力できるのがわかって、にんまりした覚えがあります(笑)

 

で書いたコードがこれ。

 

f:id:MmRevorution:20180928120502p:plain

 

また101(笑)

とうことで、101を100にして、さっきの後置ifを活用してみることに。

 

ただ、このままifを後置きすると・・・

 

f:id:MmRevorution:20180928120232p:plain

 

うーん、ちょっと見辛い?記号がいっぱい!

ということで、ここでさらにかっちょいい書き方のレクチャーを受けました。

 

even?odd?

even?と聞いてあげると、値が偶数ならtrueに、奇数ならfalseになるんだそうです。

すごい、even?って聞くだけでいいとか。

 

逆にodd?と聞いてあげると奇数でtrueになるという。

でそれを使って、後置きifにしてかっこよくしたのがこちら!

 

f:id:MmRevorution:20180928120755p:plain

 

かーっこいい!(のかな?)

比較すると・・・

 

f:id:MmRevorution:20180928121836p:plain

 

お、こうやって比較するとなんかだいぶスッキリしてるー。

 

レクチャー3 メソッドと配列の場所

これは自分的にかなりのスッキリポイントだったんです。

問題はこちら。

 

f:id:MmRevorution:20180928122239p:plain

 

おー、これわかる。

personを配列かなんかにまとめて、defでご挨拶メソッドでもかけばいいんでしょ?

ほいほい。

 

そして書いたのがこちら。

f:id:MmRevorution:20180928122433p:plain

 

 このコードの問題点

これ、配列がgreetingメソッドの中にいますよね。

私この時、メソッドとか変数とかスコープ全然わかってなくて(今もまだ全然理解が足要復習ポイント)、とりあえずメソッドの中に書けばいいのかなーくらいの軽い考えでした。

 

でも、これだとメソッドの役割の1つにある「隠遁」によって、あまり好ましくない状況なのだと教わりました。

 

メソッドの役割:隠遁

隠遁(いんとん)ってのは、グーグル先生によると・・・

 いんとん
 【隠遁
 
  1. 《名・ス自》
    交わりを絶って俗世間からのがれて暮らすこと。
     「―者」

だそうです。

転じて、「表に見せないこと」を隠遁と表したそうです。

 

たとえばputs。

putsもメソッドなので、Rubyの中のどこかで

def puts 
:
end

って定義が書かれてるんですよね。

 

メンターさん曰く、ただ文字列を出力させるだけだけれど、実際にそのためのコードはかなり複雑に書かれているんだそう。

 

でも、そのputsメソッドの中身を知らなくったって「putsすればそのあとのクォーテーション・ダブルクォーテーョンでくくった中身が表示される」ってのがわかってる。

 

こうしてメソッドの中身が見えない・知らない、それでも何をするものなのかはわかると言う様を「隠遁」と表現するのだそうです。

 

この中身を理解していちいち書かないといけないんじゃ、メソッドの意味がないと言うことで。

 

「もしメソッドの中に配列があったら?」

今回の例だと、配列を構成する要素は「鈴木さん」やら「山田さん」やら人のお名前な訳ですが、メンバーの増減ってのが現実にはよくある。

 

人の名前に限らず、配列で管理しようとするものって何かのリストだから、現実世界ではリストの内容が増減・変更されることが当然ある。

 

なのに、メソッドの中・・・たとえばputsの中身=「超長ったらしい、すんごい複雑であろうコードの中」に配列がいたら。

 

まずputsのメソッドが書いてある場所を探して、メソッドの中の配列がどこに書いてあるのかを探して・・・とかなりの作業量に。

 

ただ配列の中身を足し引き変更するだけであっても、メソッドをいじることに変わりはないから、触ったらいかんところを触ってしまうかも。

うっかりメソッド中のコード書き換えしちゃって予期せぬエラーが出たり・・・。

 

だから、メソッドの中に配列・ハッシュなどのどう考えても後から更新が必要になるであろう情報を突っ込まないほうがいいよねってことなんだそうです。

 

 なおしてみた

で、こうなりました。

 

f:id:MmRevorution:20180928130424p:plain

 

greetingメソッドには、出力のお仕事のみしてもらう。

配列はメソッドをいじらなくて済むようメソッドの外へ追い出す。

配列のメンバーに一人一人ご挨拶したいので、eachメソッドで配列の中身を1つ1つ取り出す処理を書く。

 

さっきのと比較すると・・・

f:id:MmRevorution:20180928130751p:plain

 

自力で書いた文は、メソッドにあれもこれも詰め込んでます。

レクチャー後のやつは、メソッドの定義・後から更新しても問題ないように配列の独立・繰り返し処理と別れて書かれています。

 

これによりたとえば「山田さんには"こんにちは"して、鈴木さんには"こんばんわ"しよう」とおもったらメソッドの中身を変えればいい。

 

メンバーの増減・お名前の変更があれば配列のみいじればいい。

 

繰り返し処理の時、今お休み中のあの人をスキップして繰り返したいならeachを直せばいい。

 

こんな感じで、メンテナンスもしやすいコードに。

すごい、なるほど。目から鱗どころか目玉がそのまま落っこちるところだよ。

こういうのを考える力もつけないと。

 

ということで・・・

いや、実はもっとたくさんやったんですけど、書こうと思ったらものすごい情報量で(笑)

 

(そういうのを端的にまとめる力もプログラミングの中で役に立ちそう。)

 

大見出し2つだけど、今日はここまでにしよ。

復習もしたいし。

 

続きはまた書きますが、プログラミングっていろーんなことを考えて組み立てていくんだねっていう改めての気づき。

 

あと、全然関係ないけれど、私を担当してくれているメンターさんは北の方にお住いの方で、豊かな自然の中でフリーランスエンジニアされてる方なんです。

 

だからZoomでチャット授業やってるんですけど、今日授業中「ピーヒョロロロロオオオオオオーーー」って(笑)

 

最初何が聞こえたんだろう?って思ったけれど、すぐにトンビっぽいことに気がついて、メンターさんに「もしかして近くでトンビとかとんでます??」ってきいたら「聞こえました?いろんな鳥がたくさんとんでますよー」って。

 

「聞こえました!ピーヒョロロロロオオオオオオーーーっていってました!すごい!いいなー!」といったら笑ってました(笑)

 

本当にいいメンターさんなんですよ。

今回課題の中でどん詰まりだったのはクラスなんですけど、超懇切丁寧に教えてくれたし。

 

まあ、続きはまた今度に!

お疲れ様でしたー!