あしあと

明日の自分への情報発信

Rubyの学習(5日目)ととLinuxの学習(9日目)とプロになるためのweb技術入門(7日目)

今日は本気出す。

 

クラスの中で定義したメソッドを呼び出す。

クラスの中で定義したメソッドは「インスタンス名.メソッド名」とすることで呼び出せる。これをインスタンスメソッドという。

f:id:keropp1234:20200112065930p:plain

 

 

インスタンスメソッドは基本はメソッドと同じなので、当然引数も戻り値も扱うことができる。

f:id:keropp1234:20200112070248p:plain

 

インスタンスの中では「self」を用いることでインスタンス変数自身を代入することができる。

f:id:keropp1234:20200112070917p:plain

 

呼び出しのときにputsを忘れたり、total_priceから-100をするときの式を間違えて進めないことがあった。復習しておくように。

f:id:keropp1234:20200112071956p:plain

 

initializeメソッド
initializeメソッドを使うことで、Menu.newでインスタンスを生成した時点で自動的に呼び出すことができる。
画像で言えば「menu.initialize」と呼び出す必要があるはずが、それは必要なく、initializeメソッド内のインスタンス変数を用いてすぐにピザを出力できている。

f:id:keropp1234:20200112075955p:plain


しかしこのままだとどのインスタンスもnameがピザになってしまうので、インスタンスメソッドの引数を渡す(:を忘れないように)。こうすることでインスタンスごとに変数を変えることができる。self.name = name となっていることにも注目

f:id:keropp1234:20200112080537p:plain


require
別のファイルで読み込めるようにするには「require "./ファイル名"」で読めるようになる。

f:id:keropp1234:20200112081249p:plain

 

プログラムを走らせる際に、ユーザーの入力を待つ必要があるときは、「gets.chomp」を使うと、入力されてから次に進められるようになる。下ではsuzukiと入力されて「あなたの名前はsuzukiです」となっている(映っていないが)。

f:id:keropp1234:20200112112733p:plain

 

ただしこれでは数字の場合は文字列になってしまうため、「gets.chomp.to_i」とすることで数字のまま出力できる。

f:id:keropp1234:20200112113004p:plain

 

クラスの継承

クラスを新しく作る場合、1から作り直すと大変なので、既存のクラスを継承して新たなクラスを作ることをクラスの継承という。継承するときは 子クラス < 親クラス

とすれば継承できる。

f:id:keropp1234:20200112123430p:plain

 

子クラスにインスタンス変数を追加する

親クラスになかったインスタンスを追加するために、これまでどおり「attr_accessor」と使う。下の画像ではcalorieのインスタンス変数が追記された。

f:id:keropp1234:20200112124245p:plain

 

インスタンスのオーバーライド

子クラス内でインスタンスをオーバーライド(上書き)すると以降は子クラス内のメソッドを呼び出せるようになる。

f:id:keropp1234:20200112143328p:plain

一方で「super」を使うと親クラスの同名メソッドを呼び出すことができる。

その際は親クラスに合わせた引数を定義する。あくまでメソッドを呼び出しているので、親クラスのメソッドの定義に合わせて、superに対して引数を渡す必要がある。

f:id:keropp1234:20200112145056p:plain

 

日付を扱う〜Dateクラスの扱い方〜

DateクラスとはRubyが既に用意しているクラス。自分で定義したクラスは「./クラス名」で呼び出すが、既に用意されたクラスはrequire "date"で呼び出せる。

f:id:keropp1234:20200112150711p:plain

 

dateクラスには多くのインスタンスメソッドが用意されており、単なる出力から真偽値の判定まで可能

f:id:keropp1234:20200112150858p:plain

f:id:keropp1234:20200112150903p:plain

 

他にもインスタンスをDate.newではなくDate.todayとすることで今日の日付を出力することもできる。このようにインスタンスを作らずにクラスからメソッドを呼び出すことをクラスメソッドという。

f:id:keropp1234:20200112151251p:plain

f:id:keropp1234:20200112151600p:plain

 

クラスメソッドの作り方

クラスメソッドは、「def クラス名.メソッド名」とすることで定義できる。インスタンスメソッドとの違いはメソッド名の前にクラス名が必要になる。

f:id:keropp1234:20200112151653p:plain

 

クラスメソッド内でもDateクラスを使える。

f:id:keropp1234:20200112152018p:plain

 

クラスメソッドを呼び出す

クラスメソッドは定義時と同じように、「クラス名.メソッド名」とすることで呼び出すことができる。

f:id:keropp1234:20200112152552p:plain

 

インスタンスメソッドとの違いは以下の通り。インスタンスメソッドはインスタンスに対して呼び出し、クラスメソッドはクラスメソッドに対して呼び出す。

f:id:keropp1234:20200112152622p:plain

 

Linuxメモ

Awkコマンドはシェルの上で走っている別舞台のコマンドなので、シェルとは一部記号の意味が異なったりする。

 

awkコマンドでは一つの行(レコード)それぞれについて処理をしていく仕組みになっている。これによってUnixでは一行につき1件のデータを表現するという文化がある。これによってUnixでは一行1件のデータ処理では非常にスムーズにこなせる。

 

awkにおける$とは、$1や$2となって「流れてきたテキストデータの何番目かの項目」を入れる変数という意味を持つ。

 

Awkは条件を満たさない計算結果は廃棄する。つまりawkにはフィルターの役割もある。

 

 

コンピュータでは=は右辺を左辺に代入せよの意味

 

テキストモードはコマンダーモードとインサートモードがある。インサートモードで文字を打ち、コマンダーモードで保存、終了、削除ができる。iでインサート、escでコマンダーモードに入れる。

 

ネットで調べてもLinuxでエラーが出たときはシェルの違いの可能性もある。

 

フォアグラウンドで動いているプログラムをバックグラウンドで動かすには、Ctrl+Zで一時停止し、bgコマンドでバックグラウンドにできる。ちなみにフォアグラウンドはfg