[CG実習 >  Rubyによるプログラミングの基礎 >  メッセージの表示,オブジェクト,メソッド]

メッセージの表示,オブジェクト,メソッド

電卓と違って,プログラムで何かを計算しても,それだけでは計算機の中で 全てが行われるだけで,私たちが計算結果を知ることができません. 計算結果を知るためには,それを何らかの形で画面に表示する必要があります.

ここでは,Rubyで画面にメッセージを表示する基本的な方法と, それに関連して, Rubyにおける基本概念であるオブジェクトとメソッドについて簡単に説明します. なお,オブジェクトやメソッドは, オブジェクト指向とよばれるプログラミングパラダイムで現れる一般的な概念です. また, Rubyのプログラムに関する一般的な注意を述べます.

もくじ

  1. 例題
  2. プログラム
  3. メッセージの表示
  4. オブジェクトとメソッド
  5. Rubyに関する一般的な注意

例題

次の文字絵を画面に表示する.
Poor Ascii Art of Mickey Mouse

プログラム

例題の文字絵を表示するプログラムの内容は次の通りです. なお,各行の左端の数字は説明のために付けた行の番号で, プログラムには,この行番号は含まれません.


 1  
 2  # ミッキーマウス(??)の文字絵を表示する 
 3  print "                  \n"
 4  print "    __            \n"
 5  print "   /  \\          \n"
 6  print "   \\  /__  __    \n"
 7  print "   /  _  \\/  \\  \n"
 8  print "   0 0 \\   __/   \n"
 9  print "  O     \\_/      \n"
10  print "   \\_____/       \n"
11  print "                  \n"
12  print " \"こんにちは!\"  \n"
13  print "                  \n"
14  

[mickey.rb]

このプログラム(mickey.rb)は次のように実行します.

$ ruby mickey.rb

注意: ¥記号とバックスラッシュ

このプログラムコードには「\」が随所に現れていますが, ここで¥記号として表示されている文字は, 実際のプログラムでは,上の例題の図に表れている通り, 「バックスラッシュ」(左上から右下への斜線)として書かれています.

大雑把に説明すると,これは文字の表示方法の問題です. 同じ文字データを英語として表示した場合と日本語として表示した場合で 表示される記号が異なることがあるわけです.

メッセージの表示

printを使えば,メッセージを画面に表示できます. printの後に"……"でくくって,メッセージを書きます. なお"……"でくくられたデータを文字列とよびます.

特殊な文字の表示

printで表示されたメッセージの中には, 書いてある通りに表示が行われていない部分もあります. それらは特殊な文字を表示するための記述です.

\n 改行する
\" 『"』を表示する
\\ 『\』を表示する

特殊な文字を文字列に入れるには『\』に続いて,決められた文字を指定します. 例題では,改行は,文字列の最後のみで利用していますが, 一般には文字列のどこに現れても構いません. 『"』は文字列を区切るために利用しますので,『"』自身は そのままでは文字列に入れることができません. そのために『"』については特別な記法が必要となります. また特殊な文字を表すために『\』を使いますので, 『\』自身を出力する場合も特別な記法が必要となります.

複数のデータの表示

printでは一つの文字列だけでなく,数値,計算式などもまぜて複数のデータを表示することができます. その場合は表示したいデータを「,」で区切って順番に並べます.

$ ruby  -e 'print "The time is ", Time.now.strftime("%H:%M:%S"), "\n"
The time is 08:17:26

オブジェクトとメソッド

上記の例題プログラムの説明では,文字列や数値などをデータとよんでいます. Rubyでは,データの実体はオブジェクトです. 文字列,数値の他にも,Rubyでは,さまざまなオブジェクトが利用できます. ここでは,オブジェクトの定義を持ち出すことは避けますが, 簡単にいえば,オブジェクトとは, データとそのデータに対する処理の機能を合わせもつ対象といえます.

また例題プログラムでは, printが文字列(文字列オブジェクト)を表示するのに利用されていました. このprintのように,オブジェクトを扱って何らかの処理をする機能を メソッドといいます. またメソッドに与えるオブジェクトのことを 引数(ひきすう)といいます. 上で説明したように,printは引数をいくつでもとれます. 引数の個数が厳密に決まっているメソッドもあります. 引数の個数が0の場合もあります. オブジェクトがメソッドの引数として与えられていることを明示する場合には, 引数全体を(……)でくくります.

$ ruby  -e 'print("The time is", Time.now.strftime("%H:%M:%S"), "\n")
The time is 08:17:26
例題のプログラムのように,引数が明らかである場合には, (  )でくくる必要はありません. プログラムの意味があいまいにならない限りは,(  )を省略できます. なお,メソッドを使って処理をすることを,メソッドを呼び出す, メソッドを起動するなどのようにいいます.

オブジェクト,メソッドは,Rubyの基本的な概念です. 上記のオブジェクトとメソッドの説明は,かなり大雑把なもので, まったく十分とは言えませんが,ここでは,ひとまずこの程度に留めておくことにします.

Rubyに関する一般的な注意

Rubyでプログラムを書いていく上で知っておくべき点,問題になりそうな点について ここで説明します.

プログラム = 式の並び
プログラムは式を並べたもので,(原則として)先頭から順に実行されていきます. 式はメソッド呼び出しであったり,さまざまな定義であったりします.
空白と改行
式は改行で区切ります(「;」でも区切れます). 二つ以上の式を区切らないで1行に書くことはできません.
基本的に,式には空白文字を自由に入れることができます. 空白文字を入れても式の意味は変わりません. 式の途中で改行しても問題ありませんし,空行があっても構いません. 次のような書き方は有効です.
  print "1+1 = ",
    1+1,
    "\n"
ただし,例外もあります. たとえば文字列オブジェクトでは,空白や改行が意味をもちます. またキーワードを空白で区切ることはできません.たとえば, 「print」を, 「p  r  i  n  t」のように書くことは許されません.
大文字と小文字
大文字と小文字は区別されます. したがって,「print」を「Print」や「PRINT」のように書くことはできません.
日本語の扱い
文字列とコメントには日本語を自由に使うことができます. それ以外には,日本語は使わないようにしておいた方が無難でしょう. たとえば,次のような記号を (文字列とコメント以外で)日本語モードで書くと 英字で書いた場合と区別がつきにくいため, 一見して分かりにくい文法エラーを引き起こしますので, 気をつけて下さい.
 「 」(空白)
 「”」二重引用符
 「(){}[]」各種括弧,
さて,このようなことが分かっていれば, この実習の環境でプログラミングを行う限りは 日本語の扱いでとくに問題になることはないかと思います.
ただし,Windows上で書いたプログラムをそのまま実習で使おうとする場合には, 文字コードに気をつける必要があります. 実習の環境では,文字コードとしてEUCを仮定しています. Windowsで書くと,文字コードはたいていSJISになります. また行末の改行コードも問題になります. Linuxで文字コードを変換するには,nkfを使います. この実習では,次のような変換を行えばよいでしょう.

WindowsからUnixへ nkf --unix src_win.rb > src_unix.rb
UnixからWindowsへ nkf --windows src_unix.rb > src_win.rb
[CG実習 >  Rubyによるプログラミングの基礎 >  メッセージの表示,オブジェクト,メソッド]