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

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 

Último (9)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 

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