クジラの練習帳008
練習帳008(処理に名前を付けて作る)
以下の条件にあったメソッドを作成してください。
メソッド名
bai_gaeshida
処理内容
1、ターミナルから数値を入力させる
2、入力した数値を2倍にして戻り値にする
ヒント
def メソッド名 # メソッドの処理 end
以下は解答になります
解答
def bai_gaeshida num = gets.to_i
num * 2 end
処理1:ターミナルから数値を入力させる
getsメソッドにto_iメソッドを使いターミナルから数値の入力を受け付けます。
処理2:入力した数値を2倍にして戻り値にする
戻り値とは、メソッドから抜ける時に呼び出し元に返す値です。メソッドの最後の値が基本的に戻り値となります。
また、return文を使ってもいいです。return文を使うことでメソッドの最後でなくても戻り値にすることができます。
num * 2と最後に記載すれば、戻り値がnumを*2したものが返ります。
return文を使った場合
def bai_gaeshida num = gets.to_i return num * 2 end
クジラの練習帳007
練習帳007(繰り返し処理)
1〜10までの数値を順に足していった合計値を繰り返し処理を用いて出力するプログラムを書きましょう。
ヒント:times文を用います。
NGなプログラム
sum = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10
以下は解答
解答
sum = 0 10.times do |i| sum += i + 1 end puts sum
解説
sum = 0
一行目で合計値を入れる変数sumの初期値を0とします。
10.times do |i|
end
times文を使用し、10回繰り返す処理を中に書きます。
sum += i + 1
自己代入演算子を使い、sumに i を足していきます。i には、何回目の繰り返しか数値が入ります。
しかし、プログラムなので1回目の処理には0が i に入ってしまうため、+1をする必要があるのです。
最後にputsを用いて合計値sumを出力すればOKです!
今回は簡単でした!
クジラの練習帳006
練習帳006(条件式の種類)
今回は問題ではなく、疑問に思ったことを調べていきたいと思います。
条件分岐
条件分岐を書く場合は、if文やcase文、unless文などがありました。それぞれの強みを調べていきたいと思います。
if文の特徴
if文は一番シンプルな条件式です。
if <条件式1>
条件式1がtrueだった時の処理
elsif <条件式2>
条件式2がtrueだった時の処理
else
条件式2がfalseだった時の処理
end
条件式の真偽によって行う処理を変更していきます。
if ~がtrueなら処理を行い、falseで条件式を続ける場合はelsif ~に降ります。
条件式を抜け、falseでの処理を行う場合はelseで書きます。条件分岐の終わりにendを置きます。
unless文の特徴
unlessはifの反対で、条件式がfalseの時に処理を行います。
unless <条件式1>
条件式1がfalseだった時の処理
else
条件式1がtrueだった時の処理
end
また、elsifは使えません。
case文の特徴
case文は条件をさらに詳しく、また多くしたい時に使います。
case 対象オブジェクト
when 値1
値1と一致する場合に行う処理
when 値2
値2と一致する場合に行う処理
when 値3
値3と一致する場合に行う場合
else
どの値にも一致しない場合
end
同じ内容をif文で書くとこんな感じ
対象オブジェクト
if 対象オブジェクト == 1
値1と一致する場合に行う処理
elsif 対象オブジェクト == 2
値2と一致する場合に行う処理
elsif 対象オブジェクト == 3
値3と一致する場合に行う処理
else
どの値にも一致しない場合
end
どちらが読みやすいでしょうか?
case文はif文で代用ができると思いますが、条件が増えても可読性が保てる利点があります。
case文の例文
puts "誕生月を入力してください。"
month = gets.to_i
case month
when 1
puts "睦月"
when 2
puts "如月"
when 3
puts "弥生"
when 4
puts "卯月"
when 5
puts "皐月"
when 6
puts "水無月"
when 7
puts "文月"
when 8
puts "葉月"
when 9
puts "長月"
when 10
puts "神無月"
when 11
puts "霜月"
when 12
puts "師走"
else
puts "範囲外の値です"
end
ルーティングの設定
前回の振り返り
前回はマイグレーションファイルを編集し、テーブルの作成を行いました。
ルーティング
ルーティングとは、リクエストの行先を指定したり、新たに定義したりなど。
もっと詳しく▶︎ルーティングとは、ネットワーク上でデータを送信・転送する際に、宛先アドレスの情報を元に最適な転送経路を割り出すこと。特に、インターネットなどのIPネットワークにおいて、パケットの転送先を決定すること。
なんとなく理解できるレベル(・・;)
Railsでは7つのアクションに分割して処理を行います
index:一覧表示
show:詳細表示
new:生成
create:保存
edit:編集
update :更新
destroy:削除
ルーティングの生成
resourcesメソッドは、7つのアクションへのルーティングを自動生成するメソッド。
config/routes.rb
Rails.application.routes.draw do resources :tweets end
以下のように7つのアクション全てをルーティングを設定したことになる。
確認には、rails routesコマンドを用います。ターミナルでコマンドを実行するとルーティングを確認できます。
ターミナル
GET /tweets(.:format) tweets#index POST /tweets(.:format) tweets#create GET /tweets/new(.:format) tweets#new GET /tweets/:id/edit(.:format) tweets#edit GET /tweets/:id(.:format) tweets#show PATCH /tweets/:id(.:format) tweets#update PUT /tweets/:id(.:format) tweets#update DELETE /tweets/:id(.:format) tweets#destroy
onlyオプションは、指定したアクションのみのルーティングを自動生成する。
config/routes.rb
Rails.application.routes.draw do resources :tweets, only: :index end
ターミナル
GET /tweets(.:format) tweets#index
不要なアクションが存在すると、余分なエラーを生む可能性があるため絞る必要があるのです。
これで一覧表示に向けたルーティングが設定ができました。
まとめ
ルーティングの生成には、routes.rbでresourcesメソッドを使いましょう。欲しいルーティングが決まっている、開発途中などはonlyオプションを用いて不要なルーティングは生成しないようにしましょう。
ルーティングの確認にはrails routesコマンドを用いましょう。
次回
クジラの練習帳005
練習帳005(条件分岐)
ターミナルから数字を入力し、数字に応じて以下のように出力するプログラムを書きましょう。
0以下の数値の場合、0以下の値です
10以上の数値の場合、10以上の値です
1以上9以下の数値の場合、0より大きく10より小さい値です
input = gets.to_i # ここからソースコードを書いてください
以下は回答
回答
input = gets.to_i if input <= 0 puts "0以下の数字です" elsif input >= 10 puts "10以上の数字です" else puts "0より大きく10より小さい数字です" end
1行目で数値をコンソールから入力できます
3行目から条件分岐処理です。
条件分岐の書き方は、
if 条件1 # 条件1にtrueのときの処理 elsif 条件2 # 条件2にtrueのときの処理 else # 条件2にfalseのときの処理 end
となっています。
クジラの練習帳004
練習帳004(配列を扱う)
以下のように配列の中でしりとりをしました。
この配列をshiritoriとします。要素数が不明の状態で配列の中から最後の要素を取得しましょう。
shiritori = ["りんご", "ゴリラ", "ラッパ", ..(途中は省略)..,"ウサギ"] puts [A]
[A]に当てはまる、この配列の最後の要素のみを取得するプログラムを書く。
以下は回答
回答
shiritori = ["りんご", "ゴリラ", "ラッパ", ..(途中は省略)..,"ウサギ"] puts shiritori[shiritori.length - 1]
今回の問題は要素数がわからない点です。
003でやったlengthメソッドを用います。lengthメソッドを使えば正確な要素数を取得することができます。
shiritori.length
最後の要素は[配列の要素数 - 1]とすることで取得ができます。
配列内の要素への添字は0から数えるためです。
fruits = ["みかん", "りんご", "ぶどう"] animals[animals.length - 1]
#ぶどうと出力される
クジラの練習帳003
練習帳003(配列を扱う)
以下のように配列の中でしりとりをしました。
この配列をshiritoriとします。何回しりとりが出来たか配列の中から取得しましょう。
shiritori = ["りんご", "ゴリラ", "ラッパ", "パンダ", ”ダチョウ", "ウサギ"] puts [A]
[A]に当てはまる、配列の中の要素数を取得するプログラムを書きましょう
以下は回答になります
回答
shiritori = ["りんご", "ゴリラ", "ラッパ", "パンダ", ”ダチョウ", "ウサギ"] puts shiritori.length
#数値の6が出力される
要素の取得にはlengthメソッドを使用します。配列.lengthと書くことで配列内の要素を数値として取得することができます。