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

70
Ruby で学ぶ プログラミング入門 2015-04-25 Ryota Kameoka @ CAMPHOR- HOUSE

Upload: ryota-kameoka

Post on 16-Jul-2015

776 views

Category:

Technology


2 download

TRANSCRIPT

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

制御構造 - ifmoney = 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😊

制御構造 - elseifif 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😫

卒業🍣

制御構造 - whilecredit = 0 year = 1

while credit < 124 do puts “授業を受ける”

year += 1 credit += rand(40) end

例えばなぜか

単位が取れないとして

制御構造 - whilecredit = 0 year = 1

while credit < 124 do puts “授業を受けない”

year += 1 # credit += rand(40) end

→ 無限ループ🙅

124単位以上持っている?

授業を受けない

単位が取れない

Yes😄 No😫

卒業🍣

124単位以上持っている?

授業を受けない

単位が取れない

Yes😄 No😫

卒業🍣

8回生?

退学💀

No😅

Yes😂

制御構造 - breakwhile 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- に

遊びに来てください!!

ありがとうございました

. .