■
■1つの配列を複数の引数として展開する
a = []
b = [2,3]
a.push(1) →[1]
a.push(b) →[1,[2,3]]
[1,2,3]にしたい場合には
a.push(*b) →[1,2,3] splat展開
■%記法で文字列の配列を簡潔に作る
%wで文字列の配列を作成する
%w! apple melon orange! → ["apple","melon","orange"]
%w(apple melon orange) → 上記同様
■メソッド
クラスメソッド:クラスに対して実行する
インスタンスメソッド:クラスから作成したオブジェクトに対して
引数を渡すことで引数で指定した数値から開始することができる
with_index 添え字を取得する 繰り返しメソッド
fruits.map.with_index{fruit, i| "#{i}: #{fruit}"}
■繰り返し処理
Integerクラス timesメソッド,upto,downtoメソッド
5times.{} 5回繰り返す
10.upto(14) 10~14まで繰り返す
14.downto(10) 14~10まで繰り返す
Rubyではthrow,catchは例外処理ではなく
繰り返し処理を脱出するものとして用いる
■ハッシュ
同じ値を与えれば同じ値を返すような関数。
ハッシュ関数が返す値「ハッシュ値」
配列と異なるのは、配列がインデックスを使って要素を区別してい
ハッシュではキーと呼ばれるものを使用する。
よく使うメソッド
keys →ハッシュキーを配列として返す
values →ハッシュの値を配列として返す
has_key?/key?/include?/member? ハッシュの中に指定されたキーが存在するかどうか確認する
メソッドでは()を省略することができるが、
第一引数にハッシュの{}がくる場合には()を省略することがで
ハッシュリテラルがブロックと判断されてしまうため
■シンボル
'文字列' :シンボル
文字列とは異なり、シンボルは整数
シンボルはイミュータブルなオブジェクトであり、破壊不可能
文字列はミュータブル、破壊可能
整数のため高速に値を比較できる、メモリの使用効率が良い
ハッシュのキーなどに用いることに向いている。
・%記法でシンボルやシンボルの配列を作成する
%s!ruby is fun! →:"ruby is fun"
%s(ruby is fun) →:"ruby is fun"
■よく使うイディオム
条件分岐内で直接変数に代入してしまう。
Rubyは変数への代入自体が戻り値を持つため文を分ける必要が
limit ||=10
nil,falseの場合10を代入する
!!true →true
!!5 →true
!!false→false
!!nil →false
■
6/20 プロを目指すRuby
・式展開 #{}を用いる場合自動的にto_sメソッドが呼び出される
・丸め誤差
0.1 * 3.0 #=> 0.3000000004
コンピュータ内部で10進数ではなく2進数で計算しているため。
大小を計算する際にバグにつながる可能性あり。
Rationalクラスを使うと少数ではなく分数で計算結果が出
そのため、バグが起きにくい
0.1r * 3.0r #=> (3/10)
変数に値が入っている場合にはrationalizeメソッドを
a = 0.1
b = 3.0
a.rationalize * b.rationalize #=> (3/10)
・Rubyではnilは偽となる
・後置if
point *= 3 if day == 7
もし7日であればポイント3倍みたいな
rubyではメソッドの戻り値を設定しない(することはできる)
return を使うときは途中でメソッドを抜けるときに使うことが多い
配列を連結して1つの文字列にする
[10.20.30].join => 102030
"Hi" * 10 => Hi!Hi!......
■数値クラスの継承関係
Numeric(数値)
|
------------------------------
| | | |
Integer(整数) Float(少数) Rational(有理数) Complex(複素数)
■真偽値と評価を終了するタイミング
1 && 2 && 3 => 3 3までいかないと真偽が決められない
nil || false || 2 || 3 =>2 2の時点で真偽が確定
or and は優先順位が低く制御フローにて使われる
or 「Aが真か?、真でなければBせよ」
country or return "countryを入力してください"
# countryがnilまたはfalseの場合にはメッセージを
Rubyは、最後に評価された式がメソッドの戻り値になる
■条件演算子(参考演算子)
式 ? 真だった場合 :偽だった場合
シンプルなif/else文の場合には条件演算子を利用した方が
■Predicate Methods / Bang Methods
?で終わるメソッド predicate methods 真偽値を返すことができる。
.empty? .odd? .even? .nil?
自身で作成したメソッドでも設定可能
■基礎知識
・ガベージコレクション(GC)
Ruby使用されなくなったオブジェクトを回収し、自動的にメモ
・エイリアスメソッド
.length .size など名前だけ異なるメソッド
■テスト自動化
・テスティングフレームワークに沿って、テストコードを書く
・テストコードを実行する
・実行結果の確認
■&とシンボルを用いて書く
.map{ |s| s.upcase}
→.map(%:upcase)
・条件はブロックの引数が1つだけ
・ブロックで呼び出すメソッドには引数がない
・ブロック引数に対して、メソッドを1回呼び出す以外の処理がな
■n以上m以下、n以上m未満の判定をする
・不等号を用いるよりも範囲オブジェクトを使うことでシンプルに
0度以上100以下
def liquid?(temperature)
0 <= temperature && temperature < 100
→
(0...100).include?(temperature
end
・case 文と併用して用いる
case age
when 0..5
when 6..12
・値が連続する配列の作成をする
(1..5).to_a → [1,2,3,4,5]
■プログラムのインプットとアウトプットが明確である場合
TDD(テスト駆動開発)が向いている。
調べたら、コストかかるからどうなのって記事多いけど実際どうな
■配列
rubyは添え字に負の数を用いることができる
a = [1,2,3] a[-1] → 3
first , last メソッド
■
6/19
Progate Ruby on Rails Ⅴ
空文字を禁止する場合には
validates : content, {presence:"true"}
validates:content,{length :{maximum:140}}
一括で設定する場合には
validates:content,{presence:"true",length:{maximum:140}
saveメソッドの返り値はtrue or false
if 文を用いることで更新できなかった場合の分岐を作成可能
render メソッドを用いることで、他のアクションを利用せずに
ビューで取得した内容を表示できる
render("フォルダ名/ファイル名)
バリデーションに失敗すると、自動的にエラーメッセージを吐く仕様
そのため、エラーメッセージを表示させるためには、
本文中で、eachを用いて、エラー文を表示
post.errors.full_messages.each |message| do
たぶんeach文で取得するのは、エラーの数だけ配列で格納されている?ため多分
フラッシュを表示する機能がRailsにはある
コントローラにてアクションを設定
flash[:notice] = "表示したい文"
<% flash[:notice] %>
<div class ="flash">
<%= flash[:notice]%>
</div>
<% end %>
■
6/18 学習内容
Progate Ruby on Rails Ⅳ
編集機能,idを探し文章を呼び出し、更新する
post = Post.find_by(id: params[:id])
post.content = ""
post.save
カラムを削除する
post = Post.find_by(id: params[:id])
post.destroy
どの編集ページを表示しているか判定するためにURLにidをいれる
get "posts/:id/edit" => posts#edit
フォームを送信する,送信先のURLを指定
form_tag("/posts/#{@post.id}/update")
textarea に属性を指定して、コントローラで取得し上書きする
<textarea name = "content"> ...
@post = Post.find_by(id: params [:id])
@post.content = params[:content]
@post.save
destroyアクションはgetではなくpost
データベースを変更しない get
データベースを変更するpost
postのルーティングのリンクににマッチするには
link_to("",URL,method:"post")
@post = Post.find_by(id: params[:id])
@post.destroy
6/17 学習内容
ProgateでRuby on Railsの復習
rails new app名 app名のアプリケーションフォルダが作られる。
rails server ブラウザに接続する際に必要なコマンド
コントローラ内のアクションはビューをviewフォルダから探し出し
ブラウザに表示する役割を持つ。
ルーティングはブラウザから要求したHTMLファイルのリクエストを
ルーティングで判断し、存在する場合にはリクエストを返す。
get "URL" => "コントローラー名#アクション名"
get "home/top" => "home#top"
rails generate controller home ...でアプリケーションを作成した際に
同時にcssのファイルも同時作成される。
css にてバックグラウンドの設定
background-image: url("/top.jpg");
htmlにて画像の表示
<img class="about-img" src="/tweets.png">
ocalhost:3000 (後ろに/○○がないURL)に設定する場合
ルーティングで get "/"とする
<a href= ""></a> ""の中身にはルーティングで設定しているURLと同じ値
マイグレーションファイルの作成 content がテキスト
rails g model post content:text
rails db:migrate コマンドを実行しないと反映されない
rails console →post = Post.new(content:"") →post.save
コンソールを開き、新規データを挿入してデータを保存
URLにIDを設定
ルーティングにて get "/:id"
リンク
link_to( 文章 , url )