- 本日の作業内容
- 出席確認
電子メールで出席確認をします.宛先など以下の情報を用いてメールを作成し,
出席申告してください.なお,キーワードは授業中に紹介します.
提出形式
宛先 |
justice@mag.shimane-u.ac.jp |
件名 |
AttendR11-12_ruby_s0340** |
本文 |
学生番号
氏名
キーワード
|
(改行) (改行)
キーワードは授業中に紹介 |
注意 |
「件名」および「添付書類名」の**をそのままにしないで,必ず自分の学生番号
に修正して下さい.また,ABクラス別は指示にしたがって下さい.
|
- プログラムの流れ
ここで,一度,プログラミング
とは何をすることか,ということを考え直してみましょう.
プログラミングとは,起りうるすべての場合を想定して,それぞれのケースに対
して処理を用意しておくことです.それは,人に買い物を頼む場合に似てい
るかも知れません.たとえば,自動販売機で飲み物を買ってもらうとします.その場
合に想定するのは,次のようなことでしょうか.
- コーラがあればそれを買う
- コーラがなければスポーツドリンクにする
- スポーツドリンクもなければ冷たい緑茶にする
- 冷たい緑茶もなければ冷たいウーロン茶にする
- それもなければ,1ブロック先の自販機に行って上の作業を繰り返
す.
他にも,自販機や飲料水のメーカを指定する場合があるかも知れませんが,とりあえず,
上のようなことが当然考えられます.ここで,重要なことは,あらかじめ想定さ
れる場合を漏れなくあげることと,必要に応じて処理を繰り返すことです.
このような流れを図1のように記述することも良く行われます.このような図を
「フローチャート」と言います.
図1 自販機でのお使いの図
コンピュータは全く融通が利かないので,大人に依頼するようにはいきません.
よく,融通が聞かないことを「子供の使い」と言いますが,まさしく,そのもの
です.ただし,コンピュータは疲れませんし,だだもこねません.言われたと
おり,黙々と作業を続けます.間違って,いつまでも同じことを繰り返す処理を
つくってしますと,プログラムが終わりません.(このようなものを「無限ルー
プ」と言います.)
そのため,本当に厳密に処理を考えておかないといけないわけです.ここではその中の場合
分けを扱う条件分岐について説明します.
- 真と偽
条件を判断する上で,根拠となるのは「値」が「真」か「偽」かになります.プ
ログラミング言語では,それらをtrueもしくはfalseとして表現しますが,言語
ごとに特徴があって,trueやfalseはそれぞれ「代表値」としてあつかわれます.
Rubyでは,trueとはfalseやnilでは無いという意味になります.nilとは値が
「無い」ことを表す言葉です.例えば,次のような簡単な
スクリプト
で見てみましょう.
このスクリプトを実行するとエラーが出ます.なぜなら,自己代入する先の変数
a の値がいくらなのか分からないままさらに1を足そうとし
ているからです.なので,エラーメッセージの欄には,
tmp.rb:1: undefined method `+' for nil (NameError)
|
のように表示されます.即ち,値の無いもの,nil に対して足し算の
メソッドを実行しようとしていることに問題があります.nilとはこのような値
の無いことを意味するものです.
- if
最も基本的な条件判断を行うのが if 文です.「文」とはプログラム
中に記述されている命令で,「式」と呼ぶこともあります.
次の例
を見てみましょう.
a = 1
if a then
puts "OK"
else
puts "NG"
end
|
if というのは英語の「もしも」ですから,意味はすぐに分かると思い
ます.変数 a が何らかの値を持てばtrueですので,条
件が成立していることになり,OKが表示されます.しかし,値がなければtrueで
はないので,else の方に処理が移ります.else は「それ以
外」の意味ですから,条件が成立しなかった場合の処理をそのあとに記述します.
条件文の最後は end をつけておきます.このスクリプトはこのままで
は何回実行しても「OK」になります.そこで,次のように1行目を修正します.
また,次のような例も試してみましょう.結果が理解できるでしょうか.
処理の文は「字下げ」
をするのが通例です.Rubyでは,字下げは2文字分が推奨されています.そうなっ
ていなくても別に動作に影響はありませんが,他の人に見てもらう場合には,き
ちんと字下げをしておくのがマナーです.
上の例の then は省略可能です.また,else
の処理は無くても良ければ記述しなくても構いません.
上の例のように,if 文は図2に示すような構文になります.
図2 if 文の構造
- 比較演算
上の例は,値が存在するかどうかにより場合分けしましたが,値自体を議論する
ことももちろんあります.つまり,ある数値よりも大きいか,小さいか,という
ような場合わけです.二つの値を比較するときに使用するのが比較演算子で,表
1のようなものがあります.
表1 比較演算子の例
== | 等しい
|
> | 大きい
|
< | 小さい
|
>= | 以上
|
<= | 以下
|
!= | 等しくない
|
他にも複雑なものがありますが,とりあえず上のものを知っておくと良いでしょ
う.
使った例
を以下に示します.
x = 1
if x >= 0
puts "Positive or Zero"
else
puts "Negative"
end
|
変数 x の値が正か負かを判断するスクリプトです.変数 x
の値を変化させて実行してみてください.
最後に,「良いプログラム」とは何か,というのは難しい問題でケースバイケー
スでいろいろ要素があるでしょうが,上のスクリプトを少し違う形にしてみて,
少し考えてみましょう.次の例はどうでしょうか.
x = 1
if x >= 0
str = "positive or zero"
else
str = "negative"
end
printf "x is %s.\n", str
|
変数を新たに定義するコストと,表示にかかるコストが低減されること,このバ
ランスで決まる問題が大きいですが,プログラミングで注意することは,汎用性
も考慮し,使いまわしが効くものを重視することです.流用できる部分は流用し,
改良による変更点を少なくするためには,後のスクリプトの方が良いのではない
でしょうか.
- printf
出力の回に一度紹介した printf は指定さ
れた仮変数部分に後置された変数の値を入れて表示するものです.仮変数は表2
のような形式のものが使われます.
表2 printf で使用する仮変数 (仮引数)
%s | 文字列 |
%d | 整数型の数値 |
%f | 実数型の数値 |
%e | 指数表現の数値 |
この
printf を使った例
を見てみます.
gold = 16
silver = 9
bronze = 12
nation = "日本"
printf "アテネオリンピックにおける%sの", nation
printf "メダルの個数は金%d個,銀%d個,銅%d個です.\n", gold, silver, bronze
printf "金メダルの比率は%1.1f%です.\n", gold * 100.0 / (gold + silver + bronze)
|
printf を使うと,二重引用符の対が一つですんでいます.すなわち,
表示したい文字列を一通り記述して,仮引数で置いている部分に後に書いて
ある変数の値が入れられているのです.仮引数の順番と変数の順番が対応して
いないとエラーになってしまいますので,注意して下さい.図3に printf
を使う際に重要な対応関係を出力命令の2行目について示しておきます.
図3 printf 文の構文
- 小テスト
授業の終わりに小テストを実施します.アナウンスに注意していて下さい.
再履修クラス小テスト
- 宿題
宿題に関する案内が授業の終わりに紹介されます.注意にしたがって提出してく
ださい.
再履修クラス宿題
- 本日の用語
- 真
ブール型の値で,true.Rubyにおいては偽やnilで無いこと.
- 偽
ブール型の値で,false.
- if
条件式が真であるか偽であるかによって以下の処理の流れを決めるための構文.
- else
〜以外,を意味する単語.if 文では条件式に合わなかったときに用意
する処理をここに記述する.
- 比較演算
ふたつの値の大小や合同を調べる演算.
- printf
フォーマット付き出力.
- 仮引数
変数や値を受け取るために内部的に処理される変数.引数とは関数に与えられる
値のこと.