#author("2023-05-17T06:36:39+00:00","default:admin","admin")
#author("2024-05-08T06:50:35+00:00","default:admin","admin")
* Ruby入門 [#o0c52d7f]

** irb (Interactive Ruby)の起動と終了 [#h25a8f18]

スタートメニュー→「Ruby 3.2.2-1-x64-ucrt with MSYS2」→「Start Command Prompt with Ruby」でコマンドプロンプトを起動。
スタートメニュー→「Ruby 3.2.4-1-x64-ucrt with MSYS2」→「Start Command Prompt with Ruby」でコマンドプロンプトを起動。

黒い窓が出るので、irbと入力。

 irb

すると、irbを使用できる。

※スタートメニュー→「Ruby 3.x.x-x-x64-ucrt with MSYS2」→「Interactive Ruby」で直接 irb を起動することも可能ではある。(過去にインストーラーのバグのため、エラーになる場合があったのと、cd でディレクトリ移動をしてから起動したい場合もあるので、今回は上記方法を採用した。)

終了時は、exit と入力すると、Windowsのコマンドプロンプトに戻る。
もう一度 exit と入力すると、コマンドプロンプトも終了する。

右上の✕ボタンを押して、Windowsのコマンドプロンプトごと終了しても構わない。


** 計算(簡易電卓的な使い方) [#m7983731]

以下の演算子が用意されている。

| 足し算 | + |
| 引き算 | - |
| 掛け算 | * |
| 割り算 | / |
| 剰余(割り算後の余り) | % |
| べき乗 | ** |

計算の優先順位は、小括弧 ( ) で囲んで指定する。

例:
 1 + 2 * 3
 => 7

 (1 + 2) * 3
 => 9

数値や演算子や小括弧の前後に半角スペース(スペース)を入れても構わない。
ただし、数値の途中にスペースを入れると、当然エラーになる。

例:
 1+2*3
 => 7
 1 +  2    * 3
 => 7
 123456 * 7890
 => 974067840
 123 456 * 7 890
 => (エラーが出る)

マイナス記号は、-123 のようにマイナスと数値の間にスペース無しにすると、負の整数値になる。

 456 - -123
 => 579

Rubyでは、数値には複数の種類がある。

- 整数(Integer): 小数点を含まない数。
- 浮動小数点数(Float): 小数点を含む数。実用上は実数として扱える(厳密には異なる)。
- 有理数(Rational): 有理数≒整数同士の分数で示せる数。Rubyでは、たとえば Rational(1,3) で 1/3 を作成できる。
- 複素数(Complex) など他にもある

他のプログラミング言語では、整数の範囲に上限、下限があるのが普通であるが、
Rubyでは、整数は、メモリの許す限り、絶対値の非常に大きな整数をそのまま取り扱えるのが長所の一つ。
(ただし、絶対値が非常に大きい数を使った演算の計算速度は当然遅くなる。)

例:
 123 ** 456

*** 重大な注意点 [#n4867a87]
整数同士の割り算は整数の範囲でのみ計算される=切り捨てにより、許容できないほど不正確な結果になりがち。

例:
 1 / 3
 => 0

C言語など他の(昔から存在する)プログラミング言語と同じ仕様だが、今となっては不便。

割り算を行う場合は、どちらか一方でも小数点を含む数(浮動小数点数)にすると、小数で計算が行われる。

例:
 1 / 3.0
 => 0.333333333333333333

 1.0 / 3
 => 0.333333333333333333

 1.0 / 3.0
 => 0.333333333333333333

浮動小数点数は、限りのある桁数(有効数字)で近似的に表した数のため、誤差が発生することがあるので要注意。
コンピュータ内部では2進数で表記するため、たとえば0.1など10進数ではきりのよい数でも、2進数では近似表記になることもあるので要注意。

ただし、浮動小数点演算は、ハードウェア的に非常に高速に実行できるため、実用上は多用されている。
(うまく活用すれば、許容できる程度の誤差範囲内で高速に計算できるが、落とし穴には要注意となる。)

整数同士の割り算なら、有理数で厳密に計算することもRubyでは可能。しかし計算速度は浮動小数点より遅くなりがち。

有理数にしたい場合は、以下のように 数値.quo(数値)を使う。
 1.quo(3)
 => (1/3)


** 変数への代入 [#ne65580b]

 a = 123
 b = 456
 c = a * b
 => 56088
 a
 => 123
 b
 => 456
 c
 => 56088

プログラミング言語入門でよく使われる例として、BMIの計算を扱ってみる。

BMI(body mass index, ボディマス指数): 体重と身長の関係から算出される、ヒトの肥満度を表す体格係数である。
(出典: [[WikiPediaのボディマス指数>https://ja.wikipedia.org/wiki/%E3%83%9C%E3%83%87%E3%82%A3%E3%83%9E%E3%82%B9%E6%8C%87%E6%95%B0]])

体重の2乗を身長で割り算した値である。ただし[[MKSA単位系>https://ja.wikipedia.org/wiki/MKSA%E5%8D%98%E4%BD%8D%E7%B3%BB]]のため、身長を(センチメートルではなく)メートルで計算するのが通常である点には注意する。

 h = 163.4
 w = 72.6
 bmi = w / ((h / 100.0) ** 2) 
 => 27.19145933491038

Rubyでは、変数への代入は代入した瞬間に行われるため、異なる値を代入しても再計算は行われない。
再計算したい場合は、再度、計算式を入力することになる。

例(上記の続きで)
 h = 160.0
 w = 50.0
 bmi
 => 27.19145933491038
 bmi = w / ((h / 100.0) ** 2) 
 => 27.19145933491038
 bmi
 => 19.531249999999996

** メソッド(関数) [#o9f9b2d8]

計算の式を登録して使い回すようなことも可能である。
それには、「メソッド」を使う。

例:
 def calc_bmi(height, weight)
   weight / (( height / 100.0 ) ** 2)
 end
 
 calc_bmi(160.0, 50.0)
 => 19.531249999999996

def メソッド名(引数) 〜 end で、メソッドを定義できる。


** 条件分岐 [#f07d5ef7]

ifを使えば条件分岐ができる。

 if 条件
    条件が成立した場合に実行される部分
 end

条件が成立した場合としなかった場合で違う処理を行う場合は以下のようにelseを使う。

 if 条件
    条件が成立した場合に実行される部分
 else
    条件が成立しなかった場合に実行される部分
 end

2個以上の条件分岐を連続させたい場合は以下のように elsif を使う。以下はelsifを2回使った場合の例。

 if 条件その1
    条件その1が成立した場合に実行される部分
 elsif 条件その2
    条件その1が成立せず、条件その2が成立した場合に実行される部分
 elsif 条件その3
    条件その1と条件その2が成立せず、条件その3が成立した場合に実行される部分
 else
    条件その1と条件その2と条件その3がすべて成立しなかった場合に実行される部分
 end

** 繰り返し [#yc269f68]

Ruby には while や for などの繰り返し用の構文がある。

*** while :条件が成立している間に繰り返し実行 [#a023a478]

 while 条件
   条件が成立している間に繰り返し実行される部分
 end

*** for : 条件が成立している間に変数の値を変えながら繰り返し実行 [#v6d9baa9]

例:変数iの値を1から10まで変化させながら実行

 for i in 1..10
   puts i
 end

---------------------------------------------
参考文献: 早稲田大学(当時)伊知地 宏 氏の「プログラミング初級 (Ruby) 01」授業ページ(2016年度) https://web.archive.org/web/20170402135828/http://www.aoni.waseda.jp/ichiji/2016/ruby-01/ruby.html (現在リンク切れのため archive.org のページを表示)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS