SlideShare una empresa de Scribd logo
1 de 70
Descargar para leer sin conexión
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- に
遊びに来てください!!
ありがとうございました
..

Más contenido relacionado

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

AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説AtCoder Inc.
 
Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習Yusaku Kawaguchi
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと Haruka Ozaki
 
10分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 101010分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 1010Nobuaki Oshiro
 
JavaScriptのオブジェクト:Mathオブジェクト、Dateオブジェクト
JavaScriptのオブジェクト:Mathオブジェクト、DateオブジェクトJavaScriptのオブジェクト:Mathオブジェクト、Dateオブジェクト
JavaScriptのオブジェクト:Mathオブジェクト、DateオブジェクトYossy Taka
 
JavaScript Basic 01
JavaScript Basic 01JavaScript Basic 01
JavaScript Basic 01Yossy Taka
 
10分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 090510分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 0905Nobuaki Oshiro
 
Rubyist生活に欠かせないブロック構文の話
Rubyist生活に欠かせないブロック構文の話Rubyist生活に欠かせないブロック構文の話
Rubyist生活に欠かせないブロック構文の話Kohei Taniguchi
 
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」SAKAUE, Tatsuya
 
AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説AtCoder Inc.
 
JavaScript Basic 02 jQuery
JavaScript Basic 02 jQueryJavaScript Basic 02 jQuery
JavaScript Basic 02 jQueryYossy Taka
 

Similar a Ruby で学ぶプログラミング入門 (13)

AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説AtCoder Beginner Contest 015 解説
AtCoder Beginner Contest 015 解説
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
 
Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習Nagoya.R #12 入門者講習
Nagoya.R #12 入門者講習
 
実用Brainf*ckプログラミング
実用Brainf*ckプログラミング実用Brainf*ckプログラミング
実用Brainf*ckプログラミング
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
 
10分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 101010分で分かるr言語入門ver2.15 15 1010
10分で分かるr言語入門ver2.15 15 1010
 
JavaScriptのオブジェクト:Mathオブジェクト、Dateオブジェクト
JavaScriptのオブジェクト:Mathオブジェクト、DateオブジェクトJavaScriptのオブジェクト:Mathオブジェクト、Dateオブジェクト
JavaScriptのオブジェクト:Mathオブジェクト、Dateオブジェクト
 
JavaScript Basic 01
JavaScript Basic 01JavaScript Basic 01
JavaScript Basic 01
 
10分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 090510分で分かるr言語入門ver2.14 15 0905
10分で分かるr言語入門ver2.14 15 0905
 
Rubyist生活に欠かせないブロック構文の話
Rubyist生活に欠かせないブロック構文の話Rubyist生活に欠かせないブロック構文の話
Rubyist生活に欠かせないブロック構文の話
 
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
外国語教育メディア学会第54回全国研究大会ワークショップ「Rによる外国語教育データの分析と可視化の基本」
 
AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説
 
JavaScript Basic 02 jQuery
JavaScript Basic 02 jQueryJavaScript Basic 02 jQuery
JavaScript Basic 02 jQuery
 

Último

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 

Último (9)

[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 

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