プログラミング基礎メモ(Ruby) 途中

参考：『初めてのプログラミング』
Ruby

イントロダクション
プログラミングとは何か？
・コンピュータにサンドイッチを作らせるにはパンの探し方から様々な条件分岐に合わせて指示する必要があるように、思ったよりコンピュータはお馬鹿
・プログラミングとは、コンピュータにもののやり方を教えること⇛説明する必要がない「もっとも基本的な仕事」に辿り着くまで分割を続ける
・彼の課題が上手くいかなかった原因は「基本的な仕事」を知らないため分割できなかったから

プログラミング言語
・プログラミング言語：名詞や動詞などの基本要素→文、段落、物語
・C,Java,Ruby,Perlなど
・Rubyは十分な言語要素をもち、もっとも簡単に習得できる言語
・Rubyを使う理由→プログラムが短くなること
　ex)puts 'Hello World'
　ex)何もしないプログラム→何も書かない

プログラミングの技
・最終的にバグのないプログラムを作ることだけでなくそこに至る過程もプログラミング（過程がぐちゃぐちゃだとバグがちなものになる）
・議論→スケッチ→プロトタイプを作る→いじる→リファクタリング（中身の組み換え）をする→チューニング→テスト→ひねりを入れる→削除する→書き直す→･･･
・プログラムは構築されるのではなく成長するのである
・プログラミングの第一・最大の原則は「何がなんでもコードの重複を避けよ」（Don't Repeat Yourself DRY原則）だが、それは攻めて楽をするということ

・表示 puts
・オブジェクト（もの）
・エスケープ \

・格納（変数に代入する）
`my_string='...もう一度言えます...'
puts my_string
puts my_string
my_string='変えます'
puts my_string`

・変換による相互乗り入れ
`var1= 2
var2= '5'
puts var1.to_s + var2
puts var1 + var2.to_i`

putsとはput string ⇛ to_sを加えている
getsは取得
.chompでEnterを取り除く

`puts 'こんにちは、あなたの下のお名前は？'
f_name = gets.chomp
puts 'あなたのご苗字は？'
l_name = gets.chomp
full_name = l_name + ' ' + f_name
puts 'お会いできて光栄です。' + full_name + 'さん。:)'`

`puts 'こんにちは、あなたの好きな数は？'
fav_num = gets.chomp.to_i
better_num = fav_num + 1
puts 'そっかあ〜。' + better_num.to_s + 'ならわたしと同じだったわ。;)'`

・メソッド（動詞）
.の後
5+5も本当は5.+5

`puts 'What do you want?'
request = gets.chomp
reply = 'whaddaya mean '+request+' ?!? you\'re fired!!'
puts reply.upcase`

・フロー制御
比較メソッド
= は指示・代入
== は比較

・条件分岐
`puts '皆さんこんにちは、中学1年英語講座です。'
puts '私の名前はミセス・ガバード。あなたのお名前を英語風に書いてください。'
name = gets.chomp
if name == name.capitalize
  puts 'よくできました。' + name + 'さん、座って下さい。'
else
  puts name + '? 名前は' + name.capitalize + 'のように書くんでしたよね？'
  puts '名前の書き方もわからないのですか？'
  reply = gets.chomp
  if reply == 'いいえ'
    puts 'うーむ。そうですか。まあ、座りなさい！'
  else
    puts '出ていきなさい！'
  end
end`

・ループ
`while true
  input = gets.chomp
  puts input
  if input == 'ばいばい'
    break
  end
end
puts 'またね！'`

`num_at_start = 5
num_now = num_at_start
while num_now > 2
  puts num_now.to_s + ' bottles of beer on the wall, ' + num_now.to_s + ' bottles of beer!'
  num_now = num_now - 1
  puts 'Take one down, pass it around, ' + num_now.to_s + ' bottles of beer on the wall!'
end
puts '2 bottles of beer on the wall, 2 bottles of beer!'
puts 'Take one down. pass it around, 1 bottle of beer on the wall!'
puts '1 bottle of beer on the wall, 1 bottle of beer!'
puts 'Take one down. pass it around, no more bottles of beer on the wall!'`

・論理計算
`puts 'こんにちは。あなたのお名前は？'
name = gets.chomp
puts 'こんにちは、' + name + 'さん。'
if name == 'Chris' || name == 'Katy'
  puts 'すてきなお名前ね！'
end`
|| or
&& and
! not
`puts 'HEY THERE, SONNY! GIVE GRANDMA A KISS!'
bye_count = 0
while true
  said = gets.chomp
  if said =="BYE"
    bye_count = bye_count + 1
  else
    bye_count = 0
  end
  if bye_count >= 3
    puts 'BYE SWEETIE!'
    break
  end
  if said != said.upcase
    puts 'HUH?! SPEAK UP, SONNY!'
  else
    random_year = 1930 + rand(21)
    puts 'NO, NOT SINCE ' + random_year.to_s + '!'
  end
end`

・配列
コンピュータ内のリスト
ex) 3個のオブジェクトを格納する配列
`flavor = 'vanilla'
[89.9, flavor, [true, false]]`
⇛浮動小数点数、文字列、配列
5皿のコース料理
⇛最初のお皿はcourse[0]

`languages = ['英語', 'ノルウェー語', 'Ruby']
languages.each do |lang|
  puts lang + '大好き'
  puts 'やっぱり'
end`
each（個々）のオブジェクトについて、変数langにそのオブジェクトを代入し、endに達するまでに指示したことをすべて実行させる
→コードブロック（doとend）
→イテレータ（each）：ループ的なメソッド・必ずコードブロックが続く

整数メソッド
`3.times do
puts 'Hip-Hip-Hooray!'
end`

その他配列メソッド
last,join,push,pop

・配列の構築とソート
`puts 'Write'
words = []
while true 
 word = gets.chomp
 if word == ''
   break
 end
 words.push word
end
 puts words.sort`