tswi's dev

動くものが正しいものだ

Rubyの学習(第1回)

Rubyをほとんど触ったことがないんだけど、興味はある。
私がRubyに対して持っているイメージは以下のとおり。
なお、普段はJavaを利用することが多いので暗黙的にJavaが比較対象となっている。

  • 簡単に記載ができる
  • プログラマの自由に記載ができる反面、記載方式の制約をつけにくい
  • (熟練者が利用すれば)JavaC++C#等の言語に比べて高い生産性を発揮できる
  • (コンパイル型言語のような)コンパイルエラーが出ず、バグが混入しやすい
  • 動的型付けのため、コードの見通しが悪い
  • 実行速度が遅い
  • IDEが貧弱
  • IT業界でも特にWeb系と呼ばれる領域で活用されている
  • 大規模であったり、メンバーの入れ替わりがあるプロジェクトには向かない

学習を通して、上記のイメージが合っているのか間違っているのか、利点や欠点はどのようなものか、特に労働集約的なシステム開発プロジェクトに採用することはできるか、といったことを検証していきたい。
とはいっても、当面の目的はプログラムの記述ができるようになることなので、マイペースでやっていこうと思う。

テキスト

IPAが公開しているテキスト「Rubyプログラミング入門」を利用して勉強をしてみようと思う。*1
情報処理推進機構:オープンソフトウェア:OSS人材育成:OSSモデルカリキュラム導入実証

また、下記のリファレンスマニュアルも適宜参照する。
オブジェクト指向スクリプト言語 Ruby リファレンスマニュアル

開発環境

ことはじめ

まずはお約束のHello, World.から。

puts("Hello, World.");
#=> Hello, World.

Javaでいう"System.out.println(String arg0)"に該当する命令が"puts"らしい。
似たようなメソッドに"p"とか"print"というのもあって、違いはざっくり下記の通りらしい。

  • print
    • 文字列最後尾で改行しない
  • puts
    • 文字列最後尾で改行する
  • p
    • 文字列最後尾で改行する
    • 引数が文字列の場合はダブルクォートで囲む(数値の場合は囲まない)
    • デバッグ時によく使う?

また、クラスやメソッドの定義を記載する必要もない(ある程度まともなプログラムを組む上では必須になると思うけど)。


なお、括弧とセミコロンは省略することもできる。

puts "Hello, World."

とても簡潔。

変数

変数を使用するとき、宣言は不要。
変数名にはアルファベット、数字、アンダースコアが利用できる。最初の1文字はアルファベットにすること。

var = "variable"
puts var
#=> variable


スコープは下記の通り。

# ローカル変数
# 英小文字とアンダースコアが利用可能
local_var = "localVar"

# インスタンス変数
# 先頭に@をつける
@instance_var = "instanceVar"

# クラス変数
# 先頭に@@をつける
@@class_var = "classVar"

# グローバル変数
# 先頭に$をつける
$gloval_var = "glovalVar"


ダブルクォートで囲んだ文字列中で式展開することもできる。
ただし、シングルクォートで囲んだ場合は無効。

var = "variable"
puts "var is #{var}"
#=> var is variable

puts 'var is #{var}'
#=> var is #{var}

擬似変数

擬似変数と呼ばれる特殊な変数があり、値は自由に変更することができない。

  • nil
    • いわゆるnull。booleanの偽値としても扱われる
  • true
    • いわゆるbooleanの真値
  • false
    • いわゆるbooleanの偽値
  • self
    • メソッドの実行主体。Javaでいうthisのようなもの?
  • __FILE__
    • 実行中のファイル名。フルパスで表現される場合もあればそうでない場合もある?
    • 確実にフルパスが欲しければ"File.expand_path(__FILE__)"とすること
  • __LINE__
    • 実行中の行番号


とりあえずこんなところ。
さらっと書ける反面、よく気をつけないと何をやっているのかよく分からなくなりそうという印象。

*1:同ページでは「Rubyプログラミング中級」「Ruby on Rails開発」というテキストも同様に公開している。

*2:10.8がリリースされればバージョンアップするので、今後いつのまにか開発環境が変わっているということはありうる