#今回の記事の想定
⚫︎プログラミング学んだけど0からコードが書けない人向けです。
下の動画をベースに記事を書いて行きます。
#参考動画
この動画をベースに描いて行きます。
#なぜ手が動かないか
理由はいきなり大きなことをやろうとして何をしたらいか整理できていないことです。
これを解決するためには?
1.日本語でやりたい処理を言語化
2.言葉にしたことをコードに置き換える
3.小さく動かす
上の3つができれば書けるようになるみたいです。
#実際のコードでやってみる
動画もRubyでやっていますが自分もRubyでやって行きます。
まず以下の前提でコードを書いて行きます。
#次のFootball_playerクラス内にdataメソッドを追加し、期待する出力結果になるようにする
class Football_player
end
Football_player1 = Football_player.new('メッシ','アルゼンチン',169)
Football_player2 = Football_player.new('ロナウド','ポルトガル',187)
Football_player1.data()
Football_player2.data()
⚫︎期待する出力結果
名前: メッシ
国籍: アルゼンチン
身長: 169
名前: ロナウド
国籍: ポルトガル
身長: 187
やりたいことを言語化して書いて行きます。
class Football_player
#コード追加 名前と国籍、身長を受け取る
#名前と身長の情報を出力
end
Football_player1 = Football_player.new('メッシ','アルゼンチン',169)
Football_player2 = Football_player.new('ロナウド','ポルトガル',187)
Football_player1.data()
Football_player2.data()
⚫︎追加
1.コード追加 名前と国籍、身長を受け取る
2.名前と身長の情報を出力
この2つを追記しました。
そこでRuby 文字出力で検索します。
この記事がヒットします。
https://www.sejuku.net/blog/16119
putsを追記します。
#次のFootball_playerクラス内にdataメソッドを追加し、期待する出力結果になるようにする
class Football_player
#コード追加 名前と国籍、身長を受け取る
#名前と身長の情報を出力
name = 'メッシ'
nationality = 'アルゼンチン'
heigth = 169
puts name
puts nation
puts height
end
Football_player1 = Football_player.new('メッシ','アルゼンチン',169)
Football_player2 = Football_player.new('ロナウド','ポルトガル',187)
Football_player1.data()
Football_player2.data()
しかし出力結果は期待する結果にはならないです。
文字が連結しているのでRuby 文字連結で調べます。
するとこちらの記事がヒットします。
https://qiita.com/Kta-M/items/c7c2fb0b61b11d3a2c48
#次のFootball_playerクラス内にdataメソッドを追加し、期待する出力結果になるようにする
class Football_player
#コード追加 名前と国籍、身長を受け取る
#名前と身長の情報を出力
name = "メッシ"
nation = "アルゼンチン"
height = 169
puts "名前:"+ name #追記
puts "国籍:"+ nationality #追記
puts "身長:"+ height #追記
end
Football_player1 = Football_player.new("メッシ","アルゼンチン",169)
Football_player2 = Football_player.new('ロナウド','ポルトガル',187)
Football_player1.data()
Football_player2.data()
上のコードのように追記します。
ただこのままだとエラーが出てしまします。
名前:メッシ
国籍:アルゼンチン
Traceback (most recent call last):
2: from study_time.rb:819:in `<main>'
1: from study_time.rb:827:in `<class:Football_player>'
study_time.rb:827:in `+': no implicit conversion of Integer into String (TypeError)
数値と文字は連結できないという意味です。
"身長:"+ height と height = 169の部分のことです。
Ruby 整数 文字列変換で検索
します。
この記事がヒットします。
https://www.javadrive.jp/ruby/numeric_class/index4.html
class Football_player
#コード追加 名前と国籍、身長を受け取る
#名前と身長の情報を出力
name = "メッシ"
nationality = "アルゼンチン"
height = 169
puts "名前:" + name
puts "国籍:"+ nationality
puts "身長:"+ height.to_s //.to_sを追記
end
Football_player1 = Football_player.new("メッシ","アルゼンチン",169)
Football_player2 = Football_player.new('ロナウド','ポルトガル',187)
Football_player1.data()
Football_player2.data()
height.to_s に変更しました。
以下のエラーが出ます。
名前:メッシ
国籍:アルゼンチン
身長:169
Traceback (most recent call last):
2: from study_time.rb:830:in `<main>'
1: from study_time.rb:830:in `new'
study_time.rb:830:in `initialize': wrong number of arguments (given 3, expected 0) (ArgumentError)
その後に
class Football_player
#コード追加 名前と国籍、身長を受け取る
#名前と身長の情報を出力
name = "メッシ"
nationality = "アルゼンチン"
height = 169
puts "名前:" + name
puts "国籍:"+ nationality
puts "身長:"+ height.to_s //.to_sを追記
end
Football_player1 = Football_player.new("メッシ","アルゼンチン",169)
Football_player2 = Football_player.new('ロナウド','ポルトガル',187)
Football_player1.data()
Football_player2.data()
次はこのコードを書いて行きます。
コード追加 名前と国籍、身長を受け取る
Rubyクラス変数初期化で検索し以下の記事がヒットします。
https://www.javadrive.jp/ruby/class/index5.html
class Football_player
#コード追加 名前と国籍、身長を受け取る
def initialize(name,nationality,height)
@name = name
@nationality = nationality
@height = height
end
#名前と身長の情報を出力
name = "メッシ"
nationality = "アルゼンチン"
height = 169
def data
puts "名前:" + @name
puts "国籍:"+ @nationality
puts "身長:"+ @height.to_s
end
end
Football_player1 = Football_player.new("メッシ","アルゼンチン",169)
Football_player2 = Football_player.new('ロナウド','ポルトガル',187)
Football_player1.data()
Football_player2.data()
これで期待通りの挙動になります。
#最後に
かなりわかりづらい記事になり申し訳ありませんでした。
この記事はほぼ自分のアウトプット
のための記事です。
動画は詳しく載っているので見てみてください。