クジラの練習帳008

練習帳008(処理に名前を付けて作る)

f:id:whale_86:20201110192357j:plain

以下の条件にあったメソッドを作成してください。

メソッド名

bai_gaeshida

処理内容

1、ターミナルから数値を入力させる

2、入力した数値を2倍にして戻り値にする

 

*1

 ヒント

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 - whale_86’s blog

次回 クジラの練習帳009 - whale_86’s blog

*1:半沢直樹は見てなくて、小説だけ買って積み本になってます..

クジラの練習帳007

練習帳007(繰り返し処理)

f:id:whale_86:20201109193132j:plain

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 には、何回目の繰り返しか数値が入ります。

しかし、プログラムなので1回目の処理には0が i に入ってしまうため、+1をする必要があるのです。

 

最後にputsを用いて合計値sumを出力すればOKです!

今回は簡単でした!

 

前回 クジラの練習帳006 - whale_86’s blog

次回 クジラの練習帳008 - whale_86’s blog

クジラの練習帳006

練習帳006(条件式の種類)

f:id:whale_86:20201103194233j:plain

今回は問題ではなく、疑問に思ったことを調べていきたいと思います。

条件分岐

条件分岐を書く場合は、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

 

前回 クジラの練習帳005 - whale_86’s blog

次回 クジラの練習帳007 - whale_86’s blog

ルーティングの設定

前回の振り返り

前回はマイグレーションファイルを編集し、テーブルの作成を行いました。

前回 テーブルの作成 - whale_86’s blog

f:id:whale_86:20201106200608j:plain

 ルーティング

ルーティングとは、リクエストの行先を指定したり、新たに定義したりなど。

 

もっと詳しく▶︎ルーティングとは、ネットワーク上でデータを送信・転送する際に、宛先アドレスの情報を元に最適な転送経路を割り出すこと。特に、インターネットなどの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コマンドを用いましょう。

 

前回 テーブルの作成 - whale_86’s blog

次回

クジラの練習帳005

練習帳005(条件分岐)

f:id:whale_86:20201103194233j:plain

ターミナルから数字を入力し、数字に応じて以下のように出力するプログラムを書きましょう。

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 - whale_86’s blog

次回 クジラの練習帳006 - whale_86’s blog

クジラの練習帳004

練習帳004(配列を扱う)

f:id:whale_86:20201103194233j:plain

以下のように配列の中でしりとりをしました。

この配列をshiritoriとします。要素数が不明の状態で配列の中から最後の要素を取得しましょう。

shiritori = ["りんご", "ゴリラ", "ラッパ", ..(途中は省略)..,"ウサギ"]
puts  [A]

[A]に当てはまる、この配列の最後の要素のみを取得するプログラムを書く。

 

以下は回答

 

 

 

 

 回答
shiritori = ["りんご", "ゴリラ", "ラッパ", ..(途中は省略)..,"ウサギ"]
puts shiritori[shiritori.length - 1]

 今回の問題は要素数がわからない点です。

003でやったlengthメソッドを用います。lengthメソッドを使えば正確な要素数を取得することができます。

shiritori.length

 最後の要素は[配列の要素数 - 1]とすることで取得ができます。

配列内の要素への添字は0から数えるためです。

fruits = ["みかん", "りんご", "ぶどう"]
animals[animals.length - 1]
#ぶどうと出力される

 

 

前回 クジラの練習帳003 - whale_86’s blog

次回 クジラの練習帳005 - whale_86’s blog

クジラの練習帳003

練習帳003(配列を扱う)

f:id:whale_86:20201103194233j:plain

以下のように配列の中でしりとりをしました。

この配列をshiritoriとします。何回しりとりが出来たか配列の中から取得しましょう。

shiritori = ["りんご", "ゴリラ", "ラッパ", "パンダ", ”ダチョウ", "ウサギ"]
puts  [A]

  [A]に当てはまる、配列の中の要素数を取得するプログラムを書きましょう

 

以下は回答になります

 

 

 

 

回答
shiritori = ["りんご", "ゴリラ", "ラッパ", "パンダ", ”ダチョウ", "ウサギ"]
puts  shiritori.length
#数値の6が出力される

 要素の取得にはlengthメソッドを使用します。配列.lengthと書くことで配列内の要素を数値として取得することができます。

 

前回 クジラの練習帳002 - whale_86’s blog

次回 クジラの練習帳004 - whale_86’s blog