Ruby で学ぶ
プログラミング入門
2015-04-25
Ryota Kameoka
@ CAMPHOR- HOUSE
CAMPHOR- のご紹介
• 京都のIT系学生コミュニティー
• プログラマーとデザイナーが集まる場所
• 京大, 同志社, 京都精華, などなど
• camph.net
IPSJ77Now
びわこ花火ガイド
イベントの様子
camph.net
スピーカー紹介
• 亀岡 亮太 (@ryota-ka)
• 京都大学経済学部 B4
• 11才でプログラミングに触れる
• ちゃんとやってるのはここ1年ぐらい
• 詳しくは → http://ryota-ka.me/
今日の目標
• 「プログラミングおもしろい」と気付く
• 「プログラミング向いてないな」気付く
• プログラミングの基本的な考え方を知る
• ピザを食べて友達を増やして帰る
• なにかひとつでも持って帰ってもらえれば!
わからなくなったら
• 恥ずかしがらずに近くの人に聞きましょう!
• プログラミングできる人も混ざってます
• 今のうちに隣の人と仲良くなりましょう
さて, さっそくですが
プログラミング #とは
プログラミング #とは
 プログラミング言語(プログラミングげんご)
またはプログラム言語(プログラムげんご)とは、
コンピュータに対する一連の動作の指示を記述す
るための人工言語で、コンピュータ言語の一カテ
ゴリである。この一連の指示をプログラムと呼び、
それを記述することをプログラミングと呼ぶ。
(出典 : Wikipedia「プログラミング言語」)
❓❓❓
プログラミング #とは (要約)
• 人間がコンピューターに行ってほしい操作の手順を伝える
• 曖昧な自然言語を使うのは難しい
• 画面に Hello と表示してください
• Hello と画面に表示しろ
• コンピューターに命令する専用の簡単な言語(プログラミン
グ言語)を作って, それを用いて手順を伝える
プログラミング言語
• AWK
• BASIC
• Brainfuck
• C
• C++
• Clojure
• COBOL
• Erlang
• Objective-C
• OCaml
• Pascal
• Perl
• PHP
• Prolog
• Python
• R
• Ruby
• Rust
• Scala
• Smalltalk
• Swift
  などなど
• FORTRAN
• Go
• Haskell
• HSP
• Java
• JavaScript
• LISP
• Lua
プログラミング言語
愛を語るならフランス語
文学を語るなら英語
科学計算なら FORTRAN
iPhone アプリなら Swift
それぞれの言語に得意分野がある
Ruby ができることの例
今日作るもの
英単語クイズゲーム
実際に見てみよう
問題を分解してみる
文字を表示する
文字の入力を受け取る
正解かどうかを判定する
正解率を計算する
• 辞書を用意しておく
 (apple はりんご, dog は犬, book は本, …)
• 登録されている単語の数だけ出題を繰り返す
はじめてみよう👍
prog-8.com
画面に文字を表示する
画面に文字を表示する
• puts “表示させたい文字列”
• 文字列は (Shift+7) または (Shift+2) で囲む
計算してみる
• × じゃなくて *
• ÷ じゃなくて /
• % は余りを求める
puts 1 + 1
# => 2
puts 3 * 4
# => 12
puts 32 / 4
# => 8
puts 27 % 5
# => 2
オブジェクト
• 今日はあまり深く考えない!
• 理屈より具体的な例を見てみよう
オブジェクトとメソッド
• “Progate”.length
# 結果 : 7
もしもし “Progate” さん
あなたの文字数は何文字ですか?
オブジェクトとメソッド
• 3.14.round
# 結果 : 3
もしもし 3.14 さん
あなた四捨五入したらどうなりますの?
オブジェクトとメソッド
• puts “ABC”.reverse
# 答え : 画面に “CBA” と表示される
じゃあこう書いたら何が起こるでしょう?
もしもし “ABC” さん
あなた逆から読んだらどうなりますの?
• puts “CBA”
変数
• データを保存しておく入れ物のようなもの
x = 80 # x に 80 という値を保存
puts x + 20 # 画面に 100 と表示
x = 100 # 値を書き換えられる
puts x / 50 # 画面に 2 と表示
注意
• = は等式ではありません!!!!!
“x = 80” は,
「xという変数に80という値を保存しておく」
という意味です
変数の再代入
• 変数の値は書き換えられる
x = 100
x = x + 50
puts x
# なんと表示されるでしょう?
# 答え : 150
100
入力された文字を受け取る
• puts : 画面に文字を出力する
• gets : キーボードから文字を読み取る
オブジェクトの型
• 10 + 20
=> 30
• “プログラミング“ + “入門”
=> “プログラミング入門”
• 10 + “個のりんご”
=> ???
_人人人人人_
> エラー <
 ̄Y^Y^Y^Y ̄
そもそも
• 10 + “個のりんご”
数字 文字列+ => 足せるわけねえ💢💢
• 数字 + 数字 は OK
• 文字列 + 文字列 も OK
• 数字 + 文字列 は ダメ🙅
型の変換
• 10.to_s + “個のりんご”
10を
文字列(string)にしたらどうなるの?
=> “10” + “個のりんご”
=> “10個のりんご”
ちゃんと足せました👏👏
真偽値
• ある条件(命題)が正しいか, 正しくないかを表す値を
「真偽値」と呼ぶ
• 正しいことを true, 正しくないことを false で表す
• 高校英語の正誤問題, T とか F とかで答えましたよね?
真偽値
• 30 > 20 (30が20より大きいか)
=> true (正しい)
• 20 == 10 (20は10と等しいか)
=> false (正しくない)
制御構造 - if
• 条件によって処理を分ける (もしなら…する)
例) もし100円以上持っていれば
100円払ってりんごを買う
100円を払う
りんごを1つ手に入れる
100円以上持っている?
Yes😄 No😫
制御構造 - if
• 条件によって処理を分ける (もしなら…する)
もし100円以上持っていれば
100円払ってりんごを買う
if money >= 100
money -= 100
apple += 1
end
制御構造 - if
money = 120
if money >= 100
money -= 100
apple += 1
end
money = 80
if money >= 100
money -= 100
apple += 1
end
→ 何も起こらない
正しい!true! 正しくない!false!
→ 実行される
制御構造 - else
• もし(if)100円持っていれば
→ 100円払ってりんごを買う
• そうでなければ(else)
→ ぼくはかなしい😢
100円を払う
りんごを1つ手に入れる
100円以上持っている?
Yes😄 No😫
かなしい
制御構造 - else
if money >= 100
money -= 100
apple += 1
else
puts “お金が足りないのでつらい”
end
制御構造 - elsif
• もし(if)3,000円持っていれば
→ 3,000円払ってメロンを買う
• そうでなくてもし(else + if)100円持っていれば
→ 100円払ってりんごを買う
• そうでなければ(else)
→ ぼくはかなしい😢
3,000円を払う
メロンを1つ手に入れる
3,000円以上持っている?
Yes😄 No😫
かなしい
じゃあ100円以上持っている?
100円を払う
りんごを1つ手に入れる
No😂Yes😊
制御構造 - elseif
if money >= 3000
money -= 3000
melon += 1
elsif money >= 100
money -= 100
apple += 1
else
puts “お金が足りないのでつらい”
end
論理演算子
• 条件 P,Q (e.g. x > 100)
• P && Q => P かつ Q
• P || Q => P または Q
配列
• x, y, z じゃなくて a1, a2, a3
• 添字は1じゃなくて0から
• [‘Alice’, ‘Bob’, ‘Charlie’]
配列
names = [‘Alice’, ‘Bob’, ‘Charlie’]
puts names.size # => 3
names.push(‘Dave’)
puts names[0] # => ‘Alice’
puts names[1] # => ‘Bob’
配列のメリット
• 変数がムダに増えない
• 扱うべき変数の数を人間が知らなくてもいい
• データ自体が知っているので (size)
• 他にもたくさん(割愛)
ハッシュ
• 配列 :
names[0] = ‘Alice’
names[1] = ‘Bob’
• ハッシュ :
words[‘apple’] = ‘りんご’
words[‘dog’] = ‘犬’
制御構造 - while
• 条件が真である間ループを繰り返す
• 例) 卒業単位が うまで1年間を繰り返す
124単位以上持っている?
授業を受ける
単位を取る
Yes😄 No😫
卒業🍣
制御構造 - while
credit = 0
year = 1
while credit < 124 do
puts “授業を受ける”
year += 1
credit += rand(40)
end
例えばなぜか
単位が取れないとして
制御構造 - while
credit = 0
year = 1
while credit < 124 do
puts “授業を受けない”
year += 1
# credit += rand(40)
end
→ 無限ループ🙅
124単位以上持っている?
授業を受けない
単位が取れない
Yes😄 No😫
卒業🍣
124単位以上持っている?
授業を受けない
単位が取れない
Yes😄 No😫
卒業🍣
8回生?
退学💀
No😅
Yes😂
制御構造 - break
while credit < 124 do
puts “授業を受ける”
year += 1
credit += rand(40)
if year == 8
break
end
end
← ループを途中で抜ける
ハッシュに対する繰り返し
1周目はapple/りんご
2周目はdog/犬
3周目はbook/本
というデータがほしい
words = {
‘apple’ => ‘りんご’,
‘book’ => ‘本’,
‘dog’ => ‘犬’
}
words.each do |key, value|
puts “key: ” + key
puts “value: ” + value
end
1周目:
key: apple
value: りんご
2周目:
key: book
value: 本
3周目
key: dog
value: 犬
関数
• 一定の処理・計算をまとめる
• 正解率を計算する関数を定義してみよう
関数
• (正解率) = 100 (正解数) (出題数)
• percentage(正解数, 出題数)
= 100 (正解数) (出題数)
percentage 関数
def percentage(a, b)
return 100 * a / b
end
percentage 関数 (改)
def percentage(a, b)
if b == 0
return 0
else
return 100 * a / b
end
end
できました👏👏
終えてみて
• プログラミングって意外と地道
• 最初は覚えることがたくさん
• 思い通りに書けるようになると楽しい!
最後に
もうちょっと勉強したい方は
是非 CAMPHOR- に
遊びに来てください!!
ありがとうございました
..

Ruby で学ぶプログラミング入門