クジラの練習帳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

テーブルの作成

前回の復習

前回は、コマンドを使用してモデルの作成まで行いました。

 

f:id:whale_86:20201103215151j:plain

テーブル

▶︎テーブルとは、データベース内に作成される、データを表形式で格納する場所。データベースには目的に沿ったテーブルが用意される。

 

追加でレコードとカラムも説明します

▶︎表形式で行をレコード。列をカラムと呼びます。

 

めっちゃ分かりやすくまとめられていました。⬇️

 

26gram.com

 

マイグレーションを元にテーブルを作成

▶︎マイグレーションとは、テーブルの仕様書・設計図のこと。

▶︎テーブルはマイグレーションファイルを元に作られています。目的に沿ったテーブルを作るため、仕様を書いていきます。

 

前回のrails g modelコマンドで一緒にマイグレーションファイルも作られています。

以下のように編集します。

db/migrate/20XXXXXXXXXX_create_tweets.rb

class CreateTweets < ActiveRecord::Migration[6.0]
  def change
    create_table :tweets do |t|
      t.string :name
      t.string :text
      t.text :image
      t.timestamps
    end
  end
end

 t.に続くのが「型」で、に続くのが「カラム名」になります。

カラム名の型

 

カラムの型 説明 用途
integer 数値 金額、回数など
string 文字(短文) ユーザー名、メールアドレスなど
text 文字(長文) 投稿文、説明文など
boolean 真か偽か はい・いいえの選択、合格・不合格のフラグなど
datetime 日付と時刻 作成日時、更新日時など

 マイグレーションファイルにデフォルトでt.timestampsとありますが、こちらはcreated_atとupdated_atというカラムを作成してくれます。こちらは、データ登録(更新)の日時を記録してくれます。

マイグレーションの実行

マイグレーションに記述した内容を、データベースに適用します。

これはrails db:migrateコマンドを使用します。

 

ターミナル

# マイグレーションの実行(tweetsテーブルの作成)
% rails db:migrate

 以下のような表示が出れば成功です

# 下記のような結果が出力されれば成功です。(数字等は変化します)
== 20200306015943 CreateTweets: migrating =====================================
-- create_table(:tweets)
   -> 0.0148s
== 20200306015943 CreateTweets: migrated (0.0149s) ==================

 テーブルができたか確認していきます。

 

Sequel Pro

テーブルの視覚化をしてくれるアプリケーション

www.sequelpro.com

もし入れる場合は、こちらを参考にしてみてください

qiita.com

 

マイグレーションの修正

マイグレーションは、一度実行すると上から更新することができない仕様になっています。そのため、マイグレーションを一度差し戻す必要があります。

修正をするために以下二点のコマンドを追加で覚えます。

 

rails db:migrate:statusコマンド

▶︎マイグレーションファイルの状況を確認するコマンドです。

ターミナル

# マイグレーションファイルの状況を確認
% rails db:migrate:status
# 以下のような出力が出れば成功
database: first_app_development Status Migration ID Migration Name -------------------------------------------------- up 20190820071210 Create posts

 

rails db:rollbackコマンド

▶︎マイグレーションの差し戻すためのコマンドです。

ターミナル

# マイグレーションファイルの差し戻し
% rails db:rollback

修正を行う場合は、状況の確認差し戻し修正マイグレート状況の確認と一段階ずつ行います

 

まとめ

今回はテーブルの作成、またマイグレーションを中心に行いました。

複雑なプログラムになるとこれとは比べ物にはならないくらいに難しいですが、基本は何より重要です。

 

前回 モデルの作成 - whale_86’s blog

次回 ルーティングの設定 - whale_86’s blog

クジラの練習帳002

練習帳002(変数の定義と使い方)

 

f:id:whale_86:20201103194233j:plain

テストの平均点を出力して欲しい。

国語が80点、数学85点、英語50点、歴史75点、理科70点の場合の平均点をターミナルに出力するプログラムを記述しましょう。

 

条件1:このプログラムでは各教科の点数を変数を使って定義してください

条件2:出力結果は以下のようになるコードを書きましょう。

5教科の平均点は、◯点です。

 ※○の部分に点数が表示される。

 

以下は解答になります

 

 

 

 

解答
japanesa_score = 80
mouth_score = 85
english_score = 50
history_score = 75
science_score = 70
avarage_score = (japanese_score + mouth_score + english_score + history_score + science_score) / 5

puts "5教科の平均点は、#{avarage_score}です。"

 条件1に変数を使ってとあるため、各教科を変数として定義します。また、平均点も変数に定義するのが望ましい。

最後にputsで出力をすれば完成です。

 

少し記述量が増えても、読みやすいコードを書くことを優先するように意識していきます。

 

前回 クジラの練習帳001と練習帳について - whale_86’s blog

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