概要

GR-CITRUSはRuby言語で動作することができます。ここではRuby初心者のために(筆者も初心者ですが)、簡単なプログラムを動かしながら基本文法を学習します。

Ruby言語についての詳細については以下に示すようなサイトをご参照ください。筆者はC言語を主としてプログラミングを行ってきましたので、気になるCとRubyの違いや、Rubyのよいところなどを中心に記載していきたいと思います。


準備

ハードウェア

GR-CITRUS、USBケーブル(マイクロBタイプ)の2つを準備します。


ソフトウェア

Rubicを使用します。Rubicの使用方法は「Rubicではじめよう!(Ruby編)」を参照してください。

gr-citrus-board
usb-cable

表示

まずはHello Worldですね!


print

プログラムの流れを確認するため、PCにメッセージを送るときにSerialクラスのprintを使います。Rubyでよく使用されるputsやp("object")は文法エラーになりますので注意してください。ちなみにnewでSerialクラスのインスタンスを生成していますが、引数の0はUSBを使うことを意味しています。


usb = Serial.new(0)
usb.print("Hello")

(結果)

Hello


printIn

改行を入れるときはprintlnとします。


usb = Serial.new(0)
usb.println("Hello")
usb.print("Hello")

(結果)

Hello

Hello


変数

プログラムではまず演算しますよね!演算に必要なのは変数です。RubyにはC言語のように型宣言はありません。ただ、数値か文字かは意識した方がいいです。


数値の扱い

C言語のように型宣言は不要です。ただ、変数をprintで表示するとき、引数は文字列のため、to_sメソッドで数値から文字列変換する必要があります。


usb = Serial.new(0)
a=7
usb.println(a.to_s) # integer to string
a+=1
usb.println(a.to_s)

(結果)

7

8


文字列の扱い

変数に文字列を入れるときはダブルクオーテーションで囲めばOKです。


usb = Serial.new(0)
a="123"
usb.println(a)
a+="abc"
usb.println(a)

(結果)

123

123abc

ダブルクオーテーションも含める場合はシングルクオーテーションで囲めばOKです。


usb = Serial.new(0)
a = '"a"'
usb.println(a.to_s)

(結果)

"a"


文字列の数値変換

文字列を数値に変換する場合、整数のときはto_iメソッド、浮動小数点のときはto_fで変換します。


usb = Serial.new(0)
a ="123.001"
usb.println(a)
b = a.to_i + 456.12
usb.println(b.to_s)
b = a.to_f + 456.12
usb.println(b.to_s)

(結果)

123.001

579.12

579.121


文字列の操作

Rubyの文字列操作は強力です。サンプルではその一部を紹介しています。


usb = Serial.new(0)
a ="aabbccddeeaabbccddee"
usb.println(a)
usb.println(a.length.to_s) #length
usb.println(a.include?("ee").to_s) #include
usb.println(a.upcase) #upcase
usb.println(a.downcase) #downcase
usb.println(a.gsub("a","A")) #gsub (replace)

(結果)

aabbccddeeaabbccddee

20

true

AABBCCDDEEAABBCCDDEE

aabbccddeeaabbccddee

AAbbccddeeAAbbccddee


配列

配列の作成

型宣言不要で配列を作成できます。インデックスはC言語と同様に0からです。


usb = Serial.new(0)
a = [1,2,3,4]
usb.println(a[2].to_s)

(結果)

3


要素

数値、文字列の両方を要素にできます。混在もできます。


usb = Serial.new(0)
a = [1, "def", 3.14]
usb.println(a[1].to_s)

(結果)

def


要素の追加や結合

Rubyの配列操作は楽々です。追加や結合の例です。unshift, push, concatを使っています。


usb = Serial.new(0)
a = ["pen"]
a.unshift("apple")
a.each do |n| 
    usb.print(n)
    usb.print(" ")
end
usb.println()
b = ["pen"]
b.push("pineapple")
b.each do |n| 
    usb.print(n)
    usb.print(" ")
end
usb.println()
b.concat(a)
b.each do |n| 
    usb.print(n)
    usb.print(" ")
end

(結果)

apple pen

pen pineapple

pen pineapple apple pen


each

eachメソッドは配列を順に取り出します。


usb = Serial.new(0)
a = [1, 2.3, "abc", [1,2]]
a.each do |n|
    usb.println(n.to_s)
end

(結果)

1

2.3

abc

[1,2]


ループ

C言語でのforやwhileです。Rubyでも使えますよ。

while

定番のwhileです。条件文が真の場合に繰り返します。


usb = Serial.new(0)
a = 5
while a > 0 do
    usb.println(a.to_s)
    a = a - 1
end

(結果)

5

4

3

2

1


times

指定回数実行します。変数aを使わない場合は|a|がなくてもOKです。


usb = Serial.new(0)
5.times do |a|
    usb.println(a.to_s)
end

(結果)

0

1

2

3

4


for

範囲オブジェクト(1..3の部分)の分実行します。正確には後述するeachメソッドで取得できる回数分実行されます。


usb = Serial.new(0)
for a in 1..3 do
  usb.println(a.to_s)
end

(結果)

0

1

2

3