「基本的な構文」の編集履歴(バックアップ)一覧はこちら
「基本的な構文」(2010/01/31 (日) 01:23:54) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
* 基本的な構文
** 命名規則
: 定数 | 大文字で始まる
: 変数 | 小文字で始まる
*** 慣習
1. クラス名はパスカル記法
class HogeHoge
2. メソッド名、変数名は_区切りの小文字
def hoge_hoge
hoge_hoge = 0
3. 定数名は_区切りの大文字
HOGE_HOGE = "hoge"
** 変数とシンボル
*** 変数のスコープ
rubyのスコープの思想「最小単位はブロック(not メソッド、not 式)」
rubyの変数の思想「変数のスコープはなるべく局所化しろ」
hoge
スコープ=ブロック・ローカル
@hoge
スコープ=インスタンス
@@hoge
スコープ=クラス
$hoge
スコープ=グローバル
*** シンボル
:hoge
同名の変数に対してリンクを張っている。
** メソッドの定義
引数なし
def bark
end
引数あり
def bark(time)
end
複数の引数あり、初期化付き
def bark(time, voice="ばう")
end
可変長引数
def bark(*voice)
end
メソッドのスコープは基本的にパブリック
** クラスの定義
class CurDog << Dog
PEDIGREE = "雑種"
attr_reader :name
def initialize(name)
@name = name
end
def bark(voice="ばう")
p voice
end
def wait
shit
end
def self.cute
p "きゅぅーん"
end
private :shit
def shit
p "ポトリ"
end
end
rubyの面白いところ:クラスとは「クラスオブジェクトの定数」にしか過ぎない。
*** クラスオブジェクト??
クラス定義に従ってインスタンスを生成できる&bold(){インスタンス工場}のこと。
*** ポイント
+ newは特別なメッセージ。メソッドとして独自定義できない。
+ initializeはnewした時に自動で呼ばれるメソッド。引数を加えることができる。
+ 継承したい時は << [継承元] を記述する。
+ インスタンス変数を公開したい時は、シンボルを使って、attr_accessor、attr_reader、attr_writer を指定する
+ メソッドを非公開にしたいときは、シンボルを使って、private、protected を指定する
+ クラスメソッド(staticなメソッド)を書くときはself.をメソッド名の前に付ける
++ このselfは、じつはクラスオブジェクト自身を指している
*** 慣習
+ クエリー系メソッドは、メソッド名の最後を"?"で終える。
+ とくにValueObjectで、インスタンスの内容を変更するメソッドは、メソッド名の最後を"!"で終える。
*** クラス・オブジェクトのインスタンス(メソッド/アトリビュート)へのアクセス
基本は"."を使う
dog = CurDog.new("ポチ")
dog.bark("わおーん")
dog.wait
定数にアクセスする場合は"::"を使う
p CurDog::PEDIGREE
ちなみに
メソッド呼び出し時の"()"は省略もできる
dog = CurDog.new "ポチ"
dog.bark "わおーん"
ただし
引数括りの()は演算式括りの()よりも優先度が高い
math.calc (a-b)+c
なんてやるとハマるから、要注意
** 制御構文
*** コメント
# コメント
*** 使える演算子
| ^ & <=> == === =~ > >= < <= << >>
+ - * / % ** ~ +@ -@ [] []= `
=+ =- =* =/ =% =**
= ?: .. ... ! not && and || or ::
: <=> | 大小比較
: === | [左辺]に[右辺]が含まれるか
: =~ | 正規表現で比較
: =+ =- etc | [左辺]に[右辺]を計算した結果を[左辺]に代入する(自己代入)
ちなみに、++や--は無い。
*** 条件分岐
**** 許容条件
if 条件式 then
実行文
elsif 条件式 then
実行文
else
実行文
end
実行文 if 条件式
**** 否定条件
unless 条件式 then
実行文
else
実行文
end
実行文 unless 条件式
**** ケース条件
case 評価式
when 式 then
実行文
else
実行文
end
*** 繰り返し
**** while
while 条件式 do
実行文
end
実行文 while 条件式
**** until
until 条件式 do
実行文
end
実行文 until 条件式
**** for
for 変数 in 範囲式 do
実行文
end
じつはfor文はほとんど使わない
10.times do |i|
end
した方が楽だしね
**** 途中で制御を抜ける等
break、next、redo、retryが使える
*** 例外構文
**** 例外を発生させる
raise 例外タイプ
raise 例外タイプ, メッセージ
raise メッセージ
**** 例外ブロック
begin
実行文
rescue 例外タイプ => 変数 then
レスキュー文
else
一般的なレスキュー文
ensure
クローズ文
end
** ほかのファイルを組み込む
組み込みたい位置で
require 'ファイル名'
require 'ディレクトリ/ファイル名'
拡張子".rb"は不要。
基本的には、カレントディレクトリからの相対パスで指定する。
ただし、gemsでインストールしたライブラリの場合、たいていはライブラリ名だけで大丈夫。
そのかわり、次のrequireを必ず入れること。
require 'rubygems'
** シンタックス・シュガー
Rubyは記述を簡便にするため、インスタンス生成に関するシンタックス・シュガーを用意している。
*** Arrayのインスタンス生成
array = [val1, val2]
*** Hashのインスタンス生成
hash = {key1=>val1, key2=>val2}
*** Stringのインスタンス生成
string = 'ruby'
*** Regexpのインスタンス生成
regexp = /ruby/
*** Fixnumのインスタンス生成
num = 1
*** Floatのインスタンス生成
float = 0.1
* ここまでできたら
Javaでフツーにできる事はできるようになる!
----
* 基本的な構文
** 命名規則
: 定数 | 大文字で始まる
: 変数 | 小文字で始まる
*** 慣習
1. クラス名はパスカル記法
class HogeHoge
2. メソッド名、変数名は_区切りの小文字
def hoge_hoge
hoge_hoge = 0
3. 定数名は_区切りの大文字
HOGE_HOGE = "hoge"
** 変数とシンボル
*** 変数のスコープ
rubyのスコープの思想「最小単位はブロック(not メソッド、not 式)」
rubyの変数の思想「変数のスコープはなるべく局所化しろ」
hoge
スコープ=ブロック・ローカル
@hoge
スコープ=インスタンス
@@hoge
スコープ=クラス
$hoge
スコープ=グローバル
*** シンボル
:hoge
同名の変数に対してリンクを張っている。
** メソッドの定義
引数なし
def bark
end
引数あり
def bark(time)
end
複数の引数あり、初期化付き
def bark(time, voice="ばう")
end
可変長引数
def bark(*voice)
end
メソッドのスコープは基本的にパブリック
** クラスの定義
class CurDog << Dog
PEDIGREE = "雑種"
attr_reader :name
def initialize(name)
@name = name
end
def bark(voice="ばう")
p voice
end
def wait
shit
end
def self.cute
p "きゅぅーん"
end
private :shit
def shit
p "ポトリ"
end
end
rubyの面白いところ:クラスとは「クラスオブジェクトの定数」にしか過ぎない。
*** クラスオブジェクト??
クラス定義に従ってインスタンスを生成できる&bold(){インスタンス工場}のこと。
*** ポイント
+ newは特別なメッセージ。メソッドとして独自定義できない。
+ initializeはnewした時に自動で呼ばれるメソッド。引数を加えることができる。
+ 継承したい時は << [継承元] を記述する。
+ インスタンス変数を公開したい時は、シンボルを使って、attr_accessor、attr_reader、attr_writer を指定する
+ メソッドを非公開にしたいときは、シンボルを使って、private、protected を指定する
+ クラスメソッド(staticなメソッド)を書くときはself.をメソッド名の前に付ける
++ このselfは、じつはクラスオブジェクト自身を指している
*** 慣習
+ クエリー系メソッドは、メソッド名の最後を"?"で終える。
+ とくにValueObjectで、インスタンスの内容を変更するメソッドは、メソッド名の最後を"!"で終える。
*** クラス・オブジェクトのインスタンス(メソッド/アトリビュート)へのアクセス
基本は"."を使う
dog = CurDog.new("ポチ")
dog.bark("わおーん")
dog.wait
定数にアクセスする場合は"::"を使う
p CurDog::PEDIGREE
ちなみに
メソッド呼び出し時の"()"は省略もできる
dog = CurDog.new "ポチ"
dog.bark "わおーん"
ただし
引数括りの()は演算式括りの()よりも優先度が高い
math.calc (a-b)+c
なんてやるとハマるから、要注意
** 制御構文
*** コメント
# コメント
*** 使える演算子
| ^ & <=> == === =~ > >= < <= << >>
+ - * / % ** ~ +@ -@ [] []= `
=+ =- =* =/ =% =**
= ?: .. ... ! not && and || or ::
: <=> | 大小比較
: === | [左辺]に[右辺]が含まれるか
: =~ | 正規表現で比較
: += -= *= etc | [左辺]に[右辺]を計算した結果を[左辺]に代入する(自己代入)
ちなみに、++や--は無い。
*** 条件分岐
**** 許容条件
if 条件式 then
実行文
elsif 条件式 then
実行文
else
実行文
end
実行文 if 条件式
**** 否定条件
unless 条件式 then
実行文
else
実行文
end
実行文 unless 条件式
**** ケース条件
case 評価式
when 式 then
実行文
else
実行文
end
*** 繰り返し
**** while
while 条件式 do
実行文
end
実行文 while 条件式
**** until
until 条件式 do
実行文
end
実行文 until 条件式
**** for
for 変数 in 範囲式 do
実行文
end
じつはfor文はほとんど使わない
10.times do |i|
end
した方が楽だしね
**** 途中で制御を抜ける等
break、next、redo、retryが使える
*** 例外構文
**** 例外を発生させる
raise 例外タイプ
raise 例外タイプ, メッセージ
raise メッセージ
**** 例外ブロック
begin
実行文
rescue 例外タイプ => 変数 then
レスキュー文
else
一般的なレスキュー文
ensure
クローズ文
end
** ほかのファイルを組み込む
組み込みたい位置で
require 'ファイル名'
require 'ディレクトリ/ファイル名'
拡張子".rb"は不要。
基本的には、カレントディレクトリからの相対パスで指定する。
ただし、gemsでインストールしたライブラリの場合、たいていはライブラリ名だけで大丈夫。
そのかわり、次のrequireを必ず入れること。
require 'rubygems'
** シンタックス・シュガー
Rubyは記述を簡便にするため、インスタンス生成に関するシンタックス・シュガーを用意している。
*** Arrayのインスタンス生成
array = [val1, val2]
*** Hashのインスタンス生成
hash = {key1=>val1, key2=>val2}
*** Stringのインスタンス生成
string = 'ruby'
*** Regexpのインスタンス生成
regexp = /ruby/
*** Fixnumのインスタンス生成
num = 1
*** Floatのインスタンス生成
float = 0.1
* ここまでできたら
Javaでフツーにできる事はできるようになる!
----