キーボードの配置は主に以下の通りである。
赤丸で囲まれている部分を【コントロール】といい、プログラムの操作をする上で大事なキーとなるため必ず覚えておく。他にも、【shift(シフト)】というキーもよく使うものであるので必ず覚えておくこと。コントロールを押しながら別のキーを押す、シフトを押しながら別のキーを押すというように別のキーと組み合わせて使うので、その組み合わせをしっかり記憶しておくことでプログラムを書く際にスムーズに進めることが出来る。このJD説明書と別冊の教科書ではコントロールを押しながら、1を押すことを【C-1】と記載する。【C-●】と出てきたら、それはコントロールを押しながら●のキーを押す操作である。
【C-1】と入力することで、emacs(いーまっくす)というタブを選択することが出来る。このタブを使ってプログラムを作成することが出来る。もしemacsというタブを選択することが出来ない場合、何もない場所を左クリックしてメニューを表示し、上にあるemacsを選んで新しくタブを出す。
【C-2】と入力することで、kterm(けーたーむ)というタブを選択することが出来る。このタブを使ってプログラムを実行したり、作ったプログラムを確認したり出来る。もしktermというタブを選択することが出来ない場合、何もない場所を右クリックしてメニューを表示し、上にあるktermを選んで新しくタブを出す。
プログラムは上から1行づつ書いていき、上から順に実行されていく。途中から・下からは実行はされない。プログラムは1文字でもおかしい部分があると動いてはくれないため、誤字脱字などに気をつける。
#!/usr/bin/env ruby #-*- coding: utf-8 -*- print("こんにちは!") print("JD 鳥海塾の〇〇〇〇です。\n")
こんにちは!
JD 鳥海塾の〇〇〇〇です。
プログラムは必ず保存してから実行する。保存を行うときには【C-x】【C-s】保存が出来ると、左下にある**のマークが--に変わる。**が保存できていないという証で、ーーが保存完了の証。
プログラムファイルを作るためにはemacs上で【C-x】【C-f】を入力する。すると下の部分に青文字で Find file: ~/ というテキストが出てくる。
Find file: ~/
そこに続けて Ruby/my1.rb と入力することでmy1.rbというプログラムファイルを作成することが出来る。my1 の部分は自分の好きな名前を入れる事が出来る。 kudamono.rb yasai.rb keisan.rb などである。作成出来ると何も書いていない真っ白なページが出来るので、そこにプログラムを書くことが出来る。書き終わったら保存を忘れないこと。
Find file: ~/Ruby/my1.rb #my1.rbは自分が分かりやすい名前にしておく
変数とは「値」を入れておく「箱」のようなもので、事前に「値」を格納しておき、後で簡単に取り出せるように出来る。
変数を用意するにはプログラムにはこのように書く。
apple = #appleという名前をつけた「変数」を用意
この記述だけで「apple」という「変数」を作ることが出来る。では早速この変数に値を格納する。
apple = 3 #「変数」に3を格納
これでappleという「変数」に3という「値」を格納することが出来た。この格納する動きのことを代入と表現する。変数を利用して計算のプログラムを作成する。
#!/usr/bin/env ruby #-*- coding: utf-8 -*- apple = 3 #appleという「変数」に「3」を代入 print(appel + 17) #appleには「3」が格納されているので、3 + 17 になる
20
変数には自分の好きな名前をつけることが出来るが、使える文字は英数字とアンダースコア(_)のみで、最初の文字は英語の小文字でなければならない
上記のルールを守った上で複数の変数を使用したプログラムを作成する。
#!/usr/bin/env ruby
#-*- coding: utf-8 -*-
apple = 3
orange = 5
japan = 2
google_earth = apple + orange + japan
#3つの変数の値の合計をgoogle_earthに代入する
print(google_earth)
10
プログラム内において、値とはプログラムの処理の対象になるデータのこと。
これについてはプログラムを確認しながら説明していく。
#!/usr/bin/env ruby #-*- coding: utf-8 -*- print(1 + 2)
3
このプログラムはただ「1+2」を行い「3」を出力しただけのプログラムであるが、この動き自体が実は凄いことをしている。
このプログラムには「3」という文字は一切書かれていない。それにも関わらず、プログラムは「1」と「2」という数字を対象として、「足し算という処理」を行い、「3」を導き出している。
今回のプログラムの「1」と「2」のように「処理の対処になるもの」のことを「値」と呼ぶ。
日本語にひらがなとカタカナがあるように、値にも様々な種類がある。
その中で代表的なのか「数値」と「文字列」である。
数値とは「1」や「3.5」のような整数や少数のことを意味する。足し算・引き算、掛け算などの計算をするときなどに使える。
#!/usr/bin/env ruby #-*- coding: utf-8 -*- number1 = 3 #「数値」の3 number2 = 5 #「数値」の5 sum = number1 + number2 print(sum)
8 「数値」の3と「数値」の5の足し算になるのでそのまま計算し、「数値」の8という結果になる。
文字列とは複数の文字が組み合わさったもの。"(ダブルクオーテーション)で囲んで表現する。
#!/usr/bin/env ruby #-*- coding: utf-8 -*- number1 = "3" #「文字列」の3 number2 = "5" #「文字列」の5 sum = number1 + number2 #「文字列」の5と「文字列」の3の足し算 print(sum)
35 「文字列」の3と「文字列」の5の足し算になるのでそのまま連結し、「文字列」35という結果になる。
どちらも3と5の足し算であるが、結果がこんなにも違ってくる。値の形を間違えてプログラムにエラーが起こることが多いので、十分注意する。
getsとはキーボードからの入力を読み込むもの。人間が打ち込む値で、必ず文字列となる。
#!/usr/bin/env ruby
#-*- coding: utf-8 -*-
print("入力をおねがいします。\n")
number1 = gets #キーボードに打ち込んだ値をnumber1に代入
number2 = "さようなら"
print("表示します。\n")
print(number1)
print(number2)
入力をおねがいします。 こんにちは[Enter] 入力待ちになるので「こんにちは」とキーボードで入力しEnterキーを押す 表示します。 こんにちは さようなら
「入力をおねがいします。」と表示された後にユーザーの入力待ちになる。ここで「こんにちは」と入力し、その文字列がnumber1という変数に代入され、そのままプログラムは進行し、結果が表示される。getsを使うとプログラムを動かした後で自由に変数の中身を変更出来る。
getsには打ち込んだ値の後ろに必ず「改行文字」が入力されている。改行文字とは改行の指示を出す文字のことである。「\n」と書く。
getsに.chompをつけて改行文字を切り取ることが出来る。
#!/usr/bin/env ruby
#-*- coding: utf-8 -*-
print("入力をおねがいします。\n")
number1 = gets.chomp #キーボードに打ち込んだ値をnumber1に代入
number2 = "さようなら"
print("表示します。\n")
print(number1)
print(number2)
入力をおねがいします。 こんにちは[Enter] 入力待ちになるので「こんにちは」とキーボードで入力しEnterキーを押す 表示します。 こんにちはさようなら 改行行文字を切り取ったので改行されずに並んで表示される
改行文字を切り取ったため、「こんにちは」の後ろで改行されずに次の結果が表示されている。
getsで打ち込んだ値は必ず文字列であるが、「.to_i」を後ろにつけることで整数に変換出来る。
#!/usr/bin/env ruby #-*- coding: utf-8 -*- print("入力をおねがいします。\n") number1 = gets.chomp.to_i #キーボードに打ち込んだ値をnumber1に代入 number2 = gets.chomp.to_i #キーボードに打ち込んだ値をnumber2に代入 print("表示します。\n") print(number1 + number2)
入力をおねがいします。 3[Enter] 入力待ちになるので「3」とキーボードで入力しEnterキーを押す 4[Enter] 入力待ちになるので「4」とキーボードで入力しEnterキーを押す 表示します。 7 整数に変換されているので計算が出来る。
文字列のままでは計算が出来ないが、整数に変換されているので「3 + 4」の計算が可能となり、結果は7が表示される。
こちらはto_iと違い、少数に変換することの出来るもの。
#!/usr/bin/env ruby #-*- coding: utf-8 -*- print("入力をおねがいします。\n") number1 = gets.chomp.to_f #キーボードに打ち込んだ値をnumber1に代入 number2 = gets.chomp.to_f #キーボードに打ち込んだ値をnumber2に代入 print("表示します。\n") print(number1 + number2)
入力をおねがいします。 3.5[Enter] 入力待ちになるので「3.5」とキーボードで入力しEnterキーを押す 4.2[Enter] 入力待ちになるので「4.2」とキーボードで入力しEnterキーを押す 表示します。 7.7 少数に変換されているので計算が出来る。
少数も扱えるようになり、「3.5 + 4.2」の計算が可能となり、結果は7.7が表示される。
指定した値と組み合わせて文章を出力することの出来るもの。
#!/usr/bin/env ruby #-*- coding: utf-8 -*- name = "さとうたろう" number1 = 15 number2 = 1.7 printf("私の名前は%sです。\n",name) #組み合わせたい値が文字列のときは%sを使う printf("年齢は%d歳です。\n",number1) #組み合わせたい値が整数のときは%dを使う printf("身長は%fメートルです。\n",number2) #組み合わせたい値が少数のときは%fを使う
私の名前はさとうたろうです。 年齢は15歳です。 身長は1.700000メートルです。
変数の中身を使って文章を作成することが出来る。これを使えば名前をユーザーに入力させてそれを表示するプログラムも作ることが出来る。
#!/usr/bin/env ruby
#-*- coding: utf-8 -*-
name = gets.chomp
printf("私の名前は%sです。\n",name) #組み合わせたい値が文字列のときは%sを使う
さとうたろう[Enter]入力待ちになるので「さとうたろう」とキーボードで入力しEnterキーを押す 私の名前はさとうたろうです。
ifはプログラムに分かれ道を作ることが出来る。「もしも○○であるならば、△△の処理を行う」というような動きをつけられる。
if文を書き始める場合には、最初に「if」「end」を記述する。
if この中に特定の動きをするプログラムを書く end
その後はどんな条件の時に「if」「end」の間に記述した動きをするか決める。今回はnumberが「数値の1」の時という条件をつける。
if number == 1 この中に特定の動きをするプログラムを書く end
最後にどんな動きをするのかを記述する。
if number == 1 print("ありがとう") end
今回は「ありがとう」と出力する動きを記述した。これで、「もしもnumberが数値の1であるならば、「ありがとう」と出力する処理を行う」という動きを作成することが出来た。
ここからもう1手順加える。
if number == 1 print("ありがとう") else この中に特定の動きをするプログラムを書く endelseは、指定した条件が合わない時の処理を作成することが出来る。今回の場合は、「もしもnumberが数値の1以外であるならば、△△の処理を行う」という条件を作ることが出来る。
if number == 1 print("ありがとう") else print("ごめんなさい") end
これで、「もしもnumberが数値の1であるならば、「ありがとう」と出力する処理を行う」、「もしもnumberが数値の1以外であるならば、「ごめんなさい」と出力する処理を行う」という動きを作成することが出来た。
では、動かしてみる。
#!/usr/bin/env ruby #-*- coding: utf-8 -*- print("数字を入力してください。\n") number = gets.chomp.to_i if number == 1 print("ありがとう") else print("ごめんなさい") end
数値を入力してください。
1[Enter]
ありがとう
数値を入力してください。
6739[Enter]
ごめんなさい
これで1を入力するとありがとう、1以外を入力するとごめんなさいを出力するプログラムを作成することが出来た。
最後にここで、もう1つ動きを加えてみる。
#!/usr/bin/env ruby #-*- coding: utf-8 -*- print("数字を入力してください。\n") number = gets.chomp.to_i if number == 1 print("ありがとう") elsif number == 2 #追加した部分 print("どういたしまして") #追加した部分 else print("ごめんなさい") end
数値を入力してください。
1[Enter]
ありがとう
数値を入力してください。
2[Enter]
どういたしまして
数値を入力してください。
846[Enter]
ごめんなさい
elsifは、「もしも○○であるならば、△△の処理を行う」という処理を追加することが出来る。
これでこのプログラムは、「もしもnumberが数値の1であるならば、「ありがとう」と出力する処理を行う」、「もしもnumberが数値の2であるならば、「どういたしまして」と出力する処理を行う」、「もしもnumberが数値の1と2以外であるならば、「ごめんなさい」と出力する処理を行う」という動きをするようになった。whileは「条件〇〇が正しいとき、△△を繰り返す処理を行う」という繰り返しの処理を行うときに使う。何度も繰り返すことをループという
while文を書き始める場合には、最初に「while」「end」を記述する。
while この中に特定の動きをするプログラムを書く end
その後はどんな条件の時に「while」「end」の間に記述した動きをループさせるか決める。今回はnumberが「数値の5」以下の時はループさせ続けるという条件をつける。
while number < 5 この中に特定の動きをするプログラムを書く end
最後にどんな動きをするのかを記述する。
while number < 5 print("ありがとう\n") number -= 1 end
これで「number < 5 が正しいとき、ありがとうを出力し、numberの値を1増やす動きを繰り返す処理を行う」というプログラムが作成出来た。
では、動かしてみる。
#!/usr/bin/env ruby #-*- coding: utf-8 -*- number = 0 while number < 5 print("ありがとう\n") number += 1 end
ありがとう
ありがとう
ありがとう
ありがとう
ありがとう
この回の繰り返しでnumbreは5になり、次の繰り返しの時に条件を満たしていないので
繰り返しは終了する。
1回の繰り返しごとにnumberに1づつ代入され、numberが5になったので6回目の繰り返しが条件を満たせず終了した。
今回はif文と組み合わせて作成する。
#!/usr/bin/env ruby #-*- coding: utf-8 -*- number = 0 sum = 0 print("テストの合計点を計算しましょう。\n") while true #繰り返しの条件を「true」とすることで永遠にループさせることが出来る。 print("テストの点数を入力してください\n") test = gets.chomp.to_i if test == 0 #もしもtestが0であるならば break #繰り返しの実行を中止し、繰り返しから抜ける end #if文のend printf("%d点\n",test) sum += test number += 1 end #while文のend printf("あなたの%d回分のテストの合計得点は%d点です。\n", number, sum)
テストの合計点を計算しましょう。 テストの点数を入力してください。 80[Enter] 80点 テストの点数を入力してください。 75[Enter] 75点 テストの点数を入力してください。 70[Enter] 70点 テストの点数を入力してください。 0[Enter] あなたの3回分のテストの合計点は225点です。
このプログラムは、キーボードで点数を打ち込み、テストの合計点数を計算するプログラムである。
繰り返しの条件を「true」とすることで、whileの中を永遠に繰り返し続ける処理を書くことが出来る。このような場合にbreakは役に立つ。10・11・12行目のif文に注目してもらいたい。
if test == 0 break end
このif文で「もしもtestが0であるならば、繰り返しの実行を中止し、繰り返しから抜ける処理を行う」という動きを作成している。
こうすることで、ユーザーの好きなタイミングで繰り返しを抜けさせることも出来るようになる。
制御構造を1度に2つも使用しているため、endも2つ出てきている。混乱しないように、「if」と「while」を書くときは、最初に「end」とセットで書くように心がける。
その繰り返しを無効化し、その繰り返しの先頭からやりなおす事が出来る。
先程のテストの点数の合計を出すプログラムに、点数を打ち間違えた時にやり直せる機能をredoを使って作成する。
#!/usr/bin/env ruby #-*- coding: utf-8 -*- number = 0 sum = 0 print("テストの合計点を計算しましょう。\n") while true print("テストの点数を入力してください。\n") test = gets.chomp.to_i if test == 0 break end #breakのif文用のend printf("%d点\n",test) print("間違いありませんか? 訂正したければno,問題なければno以外を入力してください。\n")
#確認用のテキストを追加 choose = gets.chomp #chooseにキーボードで入力したものを代入 if choose == "no" #もしもchooseがnoであるならば print("今の入力をなかったことにします。\n") redo #この繰り返しを無効化し、この繰り返しの先頭からやりなおす else #もしもchooseがno以外であるならば sum += test number += 1 end #redoのif文用のend end #while文用のend printf("あなたの%d回分のテストの合計得点は%d点です。\n", number, sum)
テストの合計点を計算しましょう。 テストの点数を入力してください。 80[Enter] 80点 間違いありませんか? 訂正したければno,問題なければno以外を入力してください。 yes[Enter] テストの点数を入力してください。 75[Enter] 75点 間違いありませんか? 訂正したければno,問題なければno以外を入力してください。 no[Enter] 今の入力をなかったことにします。 テストの点数を入力してください。 70[Enter] 70点 間違いありませんか? 訂正したければno,問題なければno以外を入力してください。 はい[Enter] テストの点数を入力してください。 0[Enter] あなたの2回分のテストの合計点は150点です。
大きな追加部分は17行目〜23行目の部分
if choose == "no" print("今の入力をなかったことにします。\n") redo else sum += test number += 1 end
このif文で「もしもchooseがnoであるならば、この繰り返しを無効化し、この繰り返しの先頭からやりなおす」,「もしもchooseがno以外であるならば、sumに入力したテストの点数を加算し、numberを1増やす」という動きを作成している。
配列とは、データをたくさん詰めることの出来る引き出しのようなもので、複数の値をひとまとめにすることが出来る。
yasai = "きゅうり" #yasaiという名前の「変数」 kudamono = ["りんご", "みかん", "バナナ"] #kudamonoという名前の「配列」
kudamono =["りんご", "みかん", "バナナ"]のように
配列は[ ]のなかにいくつもの値を格納して表現される。配列に格納されている1つ1つの値のことを要素と呼ぶ。
配列の要素を1つ取り出したい場合は、配列の名前[ x ]で取り出すことが出来る。配列の先頭は0から始まることに注意。
#!/usr/bin/env ruby
#-*- coding: utf-8 -*-
kudamono = ["りんご", "みかん", "バナナ"]
#kudamonoという名前の「配列」
printf("%s\n", kudamono[0])
printf("%s\n", kudamono[1])
printf("%s\n", kudamono[2])
りんご みかん バナナ
[ ]の中の数字のことを添字という。
配列とはkudamono = ["りんご", "みかん", "バナナ"]のようにkudamonoと名前のつけた配列に値を格納することが出来る。しかし、値の格納方法はこれ1つではない。
kudamono = [] #配列の中身を空にして、何も格納されていない空の配列を用意する kudamono[0] = "りんご" #空の配列の先頭に値を格納 kudamono[1] = "みかん"
#空の配列の2番めに値を格納 kudamono[2] = "バナナ" #空の配列の3番目に値を格納
この方法でもkudamono = ["りんご", "みかん", "バナナ"]の配列は作ることが出来る。しかし、この添字で直接格納するのではなく
kudamono = [] #配列の中身を空にして、何も格納されていない空の配列を用意する kudamono << "りんご" #空の配列の末尾にりんごを追加 kudamono << "みかん" #りんごが先頭に格納されている配列の末尾にみかんを追加 kudamono << "バナナ" #りんごが先頭、2番めにみかんが格納されている配列の末尾にバナナを追加
というように「<<」を使って末尾に追加していくほうが便利に格納出来る。
forは配列の中にある複数の値を、順に変数へ代入する処理を行う時に使う。
whileと似ていて、forは配列の中身を順に取り出していき、取り出せる中身がなくなったら繰り返しを終了する。
#!/usr/bin/env ruby #-*- coding: utf-8 -*- kudamono = ["りんご", "みかん", "バナナ"] for i in kudamono #kudamonoの先頭から順に取り出しiに代入する。 printf("%sを食べました。\n", i) end
りんごを食べました。 iにはりんごが代入されていた。 みかんを食べました。 iにはみかんが代入されていた。 バナナを食べました。 iにはバナナが代入されていた。
配列内の要素を先頭から順番に取り出し変数に代入しながら繰り返し処理を行う。全ての値を取り出したら繰り返し終了となる
for 変数 in 配列 繰り返したい処理 end
これがforの基本構造となる。
配列の長さ(要素の数)を返すことが出来る。
#!/usr/bin/env ruby # -*- coding: utf-8 -*- kudamono =["りんご", "みかん", "バナナ"] #要素の数は3つ kazu = kudamono.length #kudamono.lenghtは3であるから、kuzuには3が代入される printf("%dです。\n", kazu)
3です。
配列の末尾に要素を追加する。 「<<」と同じ動きをする。
#!/usr/bin/env ruby # -*- coding: utf-8 -*- kudamono = ["りんご", "みかん", "バナナ"] printf("%sです。\n", kudamono.push("もも"))
["りんご", "みかん", "バナナ", "もも"]です。
配列の先頭の要素を取り除き、その値を返す。
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
kudamono =["りんご", "みかん", "バナナ"]
sara = kudamono.shift #配列の先頭の要素を取り除きsaraに代入する
printf("%sです。\n", sara)
printf("%sです。\n", kudamono)
りんごです。 ["みかん", "バナナ"]です。
配列の要素を小さい順に並べ替える。文字列を要素に含む場合は、辞書順に並べ替える。
#!/usr/bin/env ruby # -*- coding: utf-8 -*- kazu = [3, 1, 5, 4, 2] kudamono =["りんご", "みかん", "バナナ"] printf("%sです。\n", kazu.sort) printf("%sです。\n", kudamono.sort)
[1, 2, 3, 4, 5]です。 ["みかん", "りんご", "バナナ"]です。
配列の要素の順序を逆にする。
#!/usr/bin/env ruby # -*- coding: utf-8 -*- kazu = [3, 1, 5, 4, 2] kudamono =["りんご", "みかん", "バナナ"] printf("%sです。\n", kazu.reverse) printf("%sです。\n", kudamono.reverse)
[2, 4, 5, 1, 3]です。 ["バナナ", "みかん", "りんご"]です。
reverseやsortを使っても、元の配列の並びは変わらない。
#!/usr/bin/env ruby # -*- coding: utf-8 -*- kudamono =["りんご", "みかん", "バナナ"] printf("%sです。\n", kudamono.reverse) printf("%sです。\n", kudamono)
["バナナ", "みかん", "りんご"]です。 ["りんご", "みかん", "バナナ"]です。
しかし、「!」をつけ「sort!」「reverse!」のようにすると直接操作出来る。この操作のことを破壊的操作といい。「sort!」「reverse!」のことを破壊的メソッドと呼ぶ。
#!/usr/bin/env ruby # -*- coding: utf-8 -*- kudamono =["りんご", "みかん", "バナナ"] printf("%sです。\n", kudamono.reverse!) printf("%sです。\n", kudamono)
["バナナ", "みかん", "りんご"]です。 ["バナナ", "みかん", "りんご"]です。
決められた計算や処理に名前をつけて、いつでも何度でも呼び出すことが出来る。
この決められた計算や処理のことをメソッドという。メソッドは自分で変数を作るのと同じように自由に名前と処理を考え、作ることが出来る。
今まで出できた「printf」、「gets」、「to_i」もメソッドの仲間。「getsメソッド」なんて呼んだりする。
メソッドは「getsメソッド」や「printfメソッド」などの最初からRubyに用意されているものもあるが、自分で自由に用意することも出来る。
自分でメソッドを用意する時に使うものが「def」。
メソッドはdefを使って定義することが出来る。
defを書き始める場合は、最初に「def」「end」を記述する。
def この中に特定の動きをするプログラムを書く end次は今から作るメソッドに名前をつける。
def hello この中に特定の動きをするプログラムを書く end
これで今から作るメソッドの名前は「helloメソッド」に決まった。
ここから「helloメソッド」に自分で自由に動きをつけることが出来る。
では今回は「helloメソッド」に、Helloとこんにちはを出力する動きをつけることにする。
def hello print("Hello\n") print("こんにちは\n") end
これで、Helloとこんにちはを出力する「helloメソッド」を作成することが出来た。
この作成したメソッドを呼び出すのは簡単。いままで「getsメソッド」や「printfメソッド」を呼び出していたやり方と同じ。
name = gets #「getsメソッド」を使いたいときにはgetsと書いていた。
ここまでで、知らず知らずのうちに「メソッドの呼び出し方」はマスターしている。
では、「helloメソッド」を呼び出してみる。
#!/usr/bin/env ruby # -*- coding: utf-8 -*- def hello print("Hello\n") print("こんにちは\n") end hello #「helloメソッド」を呼び出す。
Hello こんにちは
事前に「helloメソッド」を作成していたので、helloと書くだけで「helloメソッド」を呼び出すことが出来ている。
これで自分で新たにメソッドを作成することが出来た。
ここにもう一手間加えていく。
#!/usr/bin/env ruby # -*- coding: utf-8 -*- def hello(x) #「helloメソッド」に「引数」を指定する。 print("Hello\n") print("こんにちは\n") printf("私の名前は%sです。\n",x) #「helloメソッド」の「引数」を使って、printfを使用する。 end hello("さとうたろう") #「helloメソッド」(引数)を呼び出す。
Hello こんにちは 私の名前はさとうたろうです。
まず注目してほしいのは4行目の「hello(x)」。これは「helloメソッド」に「引数」をつけたもの。
引数とは、プログラムの処理をする時に、別の場所から値を持ってこれるようにするために使うもの。
今回は「helloメソッド」の処理をする時に、別の場所から値を持ってくるために「引数」を指定した。
「hello(x)」とは、「helloメソッド」の「引数」にxを指定するという意味である。
def hello(x) #「helloメソッド」に「引数」を指定する。
次に注目するべき部分は7行目の「printf("私の名前は%sです。\n",x)」。「printf」は指定した値と組み合わせて文章を出力することの出来るもの。今回は「helloメソッド」の引数xを活用することにしている。
def hello(x) #「helloメソッド」に「引数」を指定する。 printf("私の名前は%sです。\n",x) #「helloメソッド」の「引数」を使って、printfを使用する。
最後に見るべきは10行目の「hello("さとうたろう")」。今回の「helloメソッド」には「引数」xを指定している。つまり、「helloメソッド」は引数xに何かしらの値が代入されていなければ動かないということ。
そのため、引数のxに値を代入する必要がある。
値を代入するタイミングは「helloメソッド」を呼び出した時。
そのため「helloメソッド」の呼び出し方は、「hello("さとうたろう")」というように引数に値を代入しながら呼び出す。
def hello(x) #「helloメソッド」に「引数」を指定してる。 end hello("さとうたろう") #「引数」のxに値を代入しながら呼び出す。
引数を指定したメソッドは、引数に何かしらの値が代入されていなければ動かないということに注意する。
複数の文がメソッド定義されている場合、最後に実行した文の値がメソッドの実行結果として返される。
これを返却値という。
返却値で返せる実行結果は1つだけ。
#!/usr/bin/env ruby # -*- coding: utf-8 -*- def sum(x) #「sumメソッド」に「引数」を指定する。 a = x * 2 #引数を2倍に b = a + 2 #aに2を足す c = b + 5 #bに5を足す end y = 2 printf("%d\n",sum(y)) #「sumメソッド」(引数)を呼び出す。
11
この場合のメソッドの返却値は、最後に実行された「c = b + 5」の値。このプログラムの場合は11が返却値である。
returnを使うと、「メソッドの処理を中止し、指定した返却値を返す」ことが出来る。
先程のプログラムにreturnを使用してみる。
def sum(x) a = x * 2 return a #メソッドの処理を中止し、指定した返却値を返す。 b = a + 2 c = b + 5 end y = 2 printf("%d\n",sum(y))
4
「return a 」と記述することで、メソッドの処理を中止し、aを返却値として返しているので、実行結果は4となる。
数字の中からラングムに発生させる数を乱数といい、randを使って取り出 します。数値だけでなく、自分の作った配列から取り出すこともできます。 お祭りの屋台にある、おみくじ屋さんからくじを1枚とるイメージです。
変数名= rand(自然数)のようにして取り出すことができ、0から指定した
自然数未満の乱数が発生します。また、srand()によって、発生する乱数の種を初期化する必要があります。
saikoro.rb
#!/usr/bin/env ruby # -*- coding: utf-8 -*- srand()#乱数の種を初期化 saikoro = rand(6) + 1#1を足すことで7未満の整数を発生 printf("振ったサイコロの目は%dでした。\n",saikoro)#saikoroが1から6までの内ランダムで出力
取り出したい要素を含む配列と、乱数を発生させる変数を作り、配列名[変数名]のようにして出力します。ここで、rand()内の数字には、配列に並んでいる要素の数を入れます。
#!/usr/bin/env ruby # -*- coding: utf-8 -*- coin=[”表”,”裏”]#2個なのでcoin.lengthは2 srand()#乱数の種を初期化 hyori = rand(coin. length)#よって0か1のどちらかになる printf("投げたコインは%sでした。\n",coin[hyori]) #coin[hyori]が表か裏のいずれかで出力
発展
Rubyの場合、配列の中からランダムに取り出す処理は、coin.sampleと書けます。
プログラムは実行したらすぐに表示されます。逆にプログラムを一時停止することもできます。プログラムに動きをつけたいときに使ってみましょう。
一時停止させたいときはsleepを使い、sleep(秒数)のようにします。
rocket.rb
#!/usr/bin/env ruby # -*- coding: utf-8 -*- puts"ロケット打ち上げまで..." sleep(1)#1秒間停止(以下同様) puts "3" sleep(1) puts "2" sleep(1) puts "1" sleep(1) puts ”発射!!”
Time.nowを使うと、現在の時刻を受け取ることができます。秒数を数えるときは、.to_iメソッドを利用しましょう。
stopwatch.rb
#!/usr/bin/env ruby # -*- coding: utf-8 -*- puts"ストップウォッチスタート!(Enterを押すと止まるよ)" kaishi = Time.now.to_i#現在の時刻を代入 teishi = gets.chomp#入力完了まで時間経過 syuryo = Time.now.to_i#Enter を押した時刻を代入 jikan = syuryo - kaishi#要した秒数を代入 printf("タイムは%d秒です。\n",jikan)#要した秒数が出力
spawn "display -geometry +x+y ファイル名"で画像を表示でき、xには画面左から、yには画面上からのドットの位置を指定します。 ずっと画面に残ってしまうため、出していた画像を消すにはProcess.killを使います。
gazo.rb
#!/usr/bin/env ruby # -*- coding: utf-8 -*- pid = spawn "display -geometry +10+20 image.jpg"#image.jpgの場合 #しばらく別の処理をする(sleepなど) Process.kill(:INT, pid)#:INTは信号の一種