31才転職奮闘記

31才未経験がエンジニアを目指しているブログです。

復習〜Ruby編〜

こんばんは!suzyです!

 

ヨドバシで予約してたair podsが思いの外はやく入荷し毎日使ってますがワイヤレスってすごく便利ですね!

特にハンズフリーでの通話が楽過ぎて感動しました!LINE通話の通知がapple watchで受けれたらもっと便利なのにな

さて、TECH::EXPERT夜間転職コースweek1が終了しました!基礎カリキュラムの1周目が終わったので、テストまで2周目しながら理解を深めていこうと思います。

現時点で理解が出来ない部分をこの記事でまとめておこうと思います。

Rubyの復習

ハッシュオブジェクト

1つの変数で複数のデータを持つ事のできるオブジェクト。ハッシュオブジェクトは自身の中にデータとそれに対応するキーのセットを持っている。このハッシュのキーのような名前を識別する為のラベルをシンボルオブジェクトと呼ぶ。接頭語(:)をつける。

例)

hash = {title: "となりのトトロ"}

ハッシュオブジェクトから値を取得するにはhash = {title: "となりのトトロ"}

puts hash [:title]

空のハッシュを宣言する事d後からハッシュの要素を追加できるようになる。

post = {} #空のハッシュの宣言

#以下で要素の追加

post[:genre] = "映画"

post[:title] = "となりのトトロ"

post[:review] = "トトロ可愛い"

ターミナルでユーザーが入力できるgetsメソッドを使って、入力された値を出力するには、

post[:genre] = gets.chomp

→ターミナルで"映画"と入力

puts"#{post[:genre]}"

→映画に置き換わる

 

説明だけ読んでると分かるんだけど、実際にrailsで様々なフォルダがあってコード量が増えてくると、どのタイミングでハッシュオブジェクト使うのか分からなくなる。回答のコード見ると「あぁ、こういう時に使うのか」となるんだけども。railsのアプリケーションの各機能を実装していく中で当たり前にハッシュが使われいるので、理解をしっかりしていかないといけない部分。

 

配列オブジェクト

ハッシュと同じように1つの変数でたくさんの情報を持つ事のできるオブジェクト。ハッシュがキーでオブジェクトを管理していたのに対して配列は順番でオブジェクトを管理している。配列の中のデータは要素と呼ばれる。

例)

smart_phone = ["iphone", "xperia", "galaxy"]

puts smart_phone

<<メソッドを使うと新しい要素を追加できる。

smart_phone = ["iphone", "xperia", "galaxy"]

smart_phone << aquos

puts smart_phone

 

複数の情報(例レビューの場合だと)を持つ場合は複数型(例posts)で定義する。1つのレビューはハッシュオブジェクトpostで生成する。レビューを書いたらハッシュオブジェクトpostを配列オブジェクトpostsに追加する。

 

現状ではこのハッシュと配列の定義や使い方が混同している。railsを進めていくとたくさんハッシュのキーがコードの中にあるし、配列の要素もあるから、同じpostでも「post」と「posts」で違うから難しい。

eachメソッド

配列オブジェクトに対してeachメソッドを実行すると配列に含まれる要素を順番に取り出す。配列の要素の数だけ処理が行われる。

配列オブジェクト.each do |変数|

  #処理

end

 

この変数が難しい。Railsでアプリケーションを作っていくと| ele |や| link |など「ん?どこで定義されている変数だ?」って混乱してしまう。

また変数numberを定義し忘れてしまう事もよくあった。number = 0をメソッド内で定義しないとeach文で自己代入演算子number += 1が動かない。

引数

引数はメソッドの外からメソッドに渡す値。

例)

def rename(name)

  name = "Mr.#{name}"

end

name = "Suzuki"

name = rename(name)

puts name

 

引数のnameとrenameメソッドで受け取る変数nameは名前は同じだが、別物である。name = rename(name)とメソッドからの帰り値をnameに代入している。

引数は様々な言葉を出力したい場合にその分だけコードの記述量やファイルの量を増えて管理しずらくなるのを避ける為にある。

クラスとインスタンス

共通する性質をクラスという型で定義しておく事で効率的に個々のオブジェクトを生成する事ができる。クラスに基づいて生み出されたオブジェクトの事をインスタンスと呼ぶ。クラスには属性が定義され、その属性に具体的な値が入った状態でインスタンスが生成される。

例)

stirng1 = "Hello World"

文字列Hello Worldはstringクラスのインスタンスである。

クラスメソッド

定義

class クラス名

  def self.メソッド名

  end

end 

呼び出し

クラス名.メソッド名(引数)

クラス変数は変数名の最初に@@をつける。クラス変数はクラスメソッド、インスタンスメソッドの両方で使える。

インスタンスメソッド

定義

class クラス名

  def メソッド名

    #処理

  end

end

呼び出し

インスタンス.メソッド名(引数)

インスタンス変数は変数名の最初に@をつける。インスタンスメソッドで定義された変数@は他のメソッドで定義したインスタンスの属性値を参照する。

クラスとインスタンスの定義に対する呼び出しのコードがいつも分からなくなる。例えば"review"を定義するとclass Reviewだとか@@reviewとかdef write_review、def show_reviewなど"review"があちらこちらにあってどれも違うクラスやインスタンスのクラス名やメソッド名なんだけど、理解ができていないから「結局なんて呼び出したらいいんだろう」ってなってしまう。呼び出しもreview.show_reviewとかreview.write_reviewだったり混乱しきりだ。

要件定義

プログラムに登場するものを考える。それぞれの要素に対応するクラスを用意する。各クラスのインスタンスが持つ特徴を考えコードに反映させる。

この要件定義を最初にしっかり考えておかないと後から新しい定義を追加するのも手間になりそうだし、コードの可読性にも関わってきそうだ。コード上での名称も他人が理解しやすいような名称を使う必要がある。応用カリキュラムだったりアプリの作成の時に実践していこう。

 まとめ

Rubyの理解の浅い部分を抽出してみたけども、これらの部分を理解をしていかないとRailsで開発を進めていく際にかなりしんどそうだ。Railsでエラーが度々発生するのは当たり前なんだけど、ルーティングがうまくいかない事やパスが通っていない等のエラーはともかく定義の仕方がそもそも理解できていなかったり、呼び出しが出来ていない、変数や配列、引数のミス、スペルミスは極力なくしたい。初歩的なミスのエラーで余計な時間を使ってしまっては学習時間ももったいないし。

基本の部分はしっかり固めておかないといけないので、week2はしっかり理解を進めていこうと思います!!

 

終わり