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

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

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

どうも、Rubyのクラスとインスタンスと変数あたりにつまずいているアラフォーまきのです。

毎日プログラミングの勉強が最優先でなかなかブログに時間を割けないでいますが、明日6回目の授業なので、早く書かないと記事が詰まっちゃうので書きます(笑)

 

前回の続きです。

前回はこちら

www.arafo-enjineer.net

 

 今回の難問

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

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

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

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

 

なかなかのボリュームと8章の問題でつまずいたので、8章半分までなんとか終わらせたような感じ。

 

で、この5回目の授業で一番重きを置いたのが、8章。つまずいたところですね。

特にメンターさんが作ってくれた問題集の解き方・考え方の部分です。

 

問題は、超超簡単なECサイトみたいなものを書く問題。

正直「え、これしか知識ないのに、それだけでもこんなことができちゃうの!?すごい!!」という感じでした。

 

結果的に、5回目の授業の前日夜になんとか完成し、レビュー時にもとりあえずちゃんと動いたので問題はなかったけれど、ベストな状態ではなかった。

 

 

実は今もこのクラスの部分つっかかっててぜんぜん進めないし全然わからない。

理解できない。困ってる。マジで。結構時間使ってるんですけど、ほとんどモニターとにらめっこでどうしても解決できない。

 

クラス、インスタンス、インスタンス変数、メソッド

参照する、呼び出す

 

これがもうごっちゃごちゃ。

もはやわからないことがわからないレベル。

 

とはいえ、この際の課題はとりあえず形になり、レビューしてもらってだいぶ整った感じがしたんです。その時は。

 

※いまだにコードが上手にはてなさんに貼り付けできないので、画像でごめんなさい(笑)

 

こちらはレビュー前。

f:id:MmRevorution:20181004210623p:plain

最後まで引っかかったのが26行目。

24行目の引数itemには、38行目〜や48行目〜の商品データがまるまる入ってくるってことになるんだけども、item.praiceと書けば、book1.priceやcd1.priceと同じことだってことが理解できなかった。

 

授業の前日夜の時点でに、根拠も脈絡もなく「item.priceか?」と思い立って、やったらなんとかうまく行ったという。

思いつきだから当然理屈もなんも理解してなくて、ただ結果的に「ああ、なるほど!」ってなったという。

 

あとはあれだattr_accessor/readerとか、initializeとかですね。

 

attr_accessor/readerとか、initialize

attr_accessorは、インスタンス変数がクラスの外から参照したり変更できないのが困る場合、これをかけばそれができるようになるというもの。

・・・だよね?

 

ただ、外から値が参照できるといいけど、外から値を受け取れるようになると困るような場合についてはaccessorではなくreaderにして参照専用にしてあげるといいと。

・・・だよね??

 

で、attr_×××は、クラス外とのアクセスに関することを決めるだけじゃなくて、「これらはインスタンス変数ですよ」と宣言もしてくれているという。

・・・でいいよね???

 

initializeは、クラスから.newして新しいオブジェクト(=インスタンス)を作った時、「initialize・・・」とか書かなくても勝手に発動するメソッドで、しかも.newされた時に限りたった1度だけ実行されるメソッド・・・なんだよね?

 

たったの1回だけ実行となると、なんども実行する必要がある処理を書くのは向いてない。たった1回だけ実行 = 基本最初に1回だけ行うであろう初期化に使用するのがベストだよねと、そういうわけで、「i = 0」とかの初期化を書くんだよね。

 

 

そうそう、初期化って言葉も個人的にモヤっとポイントだった。

 

初期化

私の中で初期化といえば、PCの初期化ってのが最初に浮かびました。

 

私みたいにPCやプログラムの世界に生きてこなかった素人からすれば、PCの初期化=「PCの中にあるもの全て消し去ってまっさらにする」というイメージじゃないですかね。

 

全てってめっちゃ嘘なんですけど、素人からすると「自分がDLしたものとか作成したものとか全部けして、購入した時の状態に戻す」という意味で「全て消す」「まっさら」ということ。

 

でも、プログラミングでいう初期化って、まっさらとかじゃなくて「初期値を設定する」ってことなんですよね。

 

「i = 0」でその変数は0が初期値ね!と宣言してあげる。

「names = [ ]」で空っぽの配列をnamesという変数に代入ね!と宣言してあげることも初期化。この辺「えぇ・・・」ってなったけれど、とりあえず今は納得してます。

 

え、あってるよね?理解できてるよね?

 

 

レビュー後との比較

ということで、レビューしてもらって書き直してみたわけです。

右のちょっとだけ行数が増えたコードがレビュー後。

 

文字ちっちゃいなー!見えます?

早くコードくらい貼れるようになりたい(泣)

 

f:id:MmRevorution:20181004214808p:plain

 

私が最初に書いたコードだと、購入した商品が買い物かごに入るたび、購入数と合計金額を計算していくという謎仕様の無駄にハイテクなかごになっちゃってる(笑)

 

現実でそういうかごがあったらちょっと便利なこともあるかもしれないけど、普通はカゴは買いたいものを入れるだけの入れ物。

 

プログラム上では、仕事はそれぞれきちんと分けておく方が、メンテナンスもしやすいよねということもあって、入れ物としての買い物カゴと、いくつ買ったかを数える処理と、合計金額を計算する処理を分けました。

 

ほーなるほどね。

 

ところで、私がいまこのコード書くために使ってる教科書がこちら。 

で、メンターさん曰くこの教科書のp138〜p141をみればかけるっていうんだけど。ほんとおー!?私無理だったし、今見ても実際無理だと思っちゃうんだけどー!

 

こんな高度なコードがかけるの!?これだけで!?ほんとー!? 

まとめ

そういう発想をするのかーという目新しさがたくさんあった、そんな授業でした。

処理ごとにわけて書く。

かといって細かく分けすぎると、全ての処理を羅列していることと変わらないから程よくまとめる。

それがメソッドであり、オブジェクト指向ってやつらしいです。ほーん。

 

さて、この後このプログラムを利用してさらに内容を改造する課題があるんです。

これが、できない!書けない!わからない!!

 

詰んだ!詰んだよ!!

 

これについては明日の授業後に・・・。

予定としては。明日Ruby卒業でRailsに入るはずなんだけど・・・・ちょっとクラスができないのは致命的すぎるんだよなあ・・・。

 

でも、おかげさまでめげてはいないです。絶対になんとかしてやるという気持ちが消えないので本当にすごい。

 

いままで、英会話とかそういうのわからなくなったり飽きたりしてなんども挫折してるんですけど、今までにないほど詰んでるのにプログラミングだけは投げようと思わない。

 

これなんでだろう?わからないけど個人的にめちゃくちゃ楽しいからだと思う。

できた時の満足感というか、「うごいたあああー!!」っていう感動がすごかった(笑)

 

あとはただひたすら「プログラムかける人・わかる人かっこいい!」っていう憧れと、これを仕事にしてお金サクサク稼いで自分のためにお金を使うという野望がそうさせるのかも(笑)

 

メンターさんに恵まれたのもあるし、ツイッターとかで繋がりが持てるようになってきたのもあるかな?

後戻りできないという崖っぷち感もある(マジで)

 

では、また明日!6回目終わったら書きます!