で、勉強したこと。
・ブロックパラメータ
何この縦棒???それがJavaにはない書き方、|変数| をブロックパラメータというそうです。
どうやって使うかというと、コールバック的な使い方だそう。
def func
puts yield(1, 1);
end
func do |a,b|
a-b;
end
func do |a,b|
a+b
end
do〜endを処理のブロック化できるのは機能勉強した内容ですが、その処理ブロックが呼び出し元(上の例だと、funcという関数の中のyield)から値を受け取るために、ブロックパラメータを用意しとく、というモノ。Javaダイスキっ子の私にはアンマリ馴染みのない書き方だけれど、JavaScriptダイスキっ子でもある私は、JavaScriptに変換して、以下の様に理解。
function func(callback){
console.log(callback(1, 1));
}
func(function(a,b){return a+b});
func(function(a,b){return a-b});
。。。JavaScriptの方が、わかりやすくね???
(カッコ)、{カギカッコ}、ダイスキ。
・ダブルコロンは . と同じ意味。
Math::log(1)
は
Math.log(1)
と同じ意味。私はドットを使うよ。ただし、定数は::を使わないといけないそうです。
・'文字列'と"文字列"は同じ意味。
私は、"文字列"を使うよ。
・<<は配列の最後に追加、という意味。
args = ["a","b","c","d"]
args << "e"
ってやると、argsは、a,b,c,d,eになる。コレは便利。
・文字列中に#{}って入れると、カッコの中が式展開される!
"一足す一は#{1+1}" ってやると「一足す一は2」って展開される。便利。
・%記法
RubyとJavaの一番の違いは、文字列の扱い方のように感じています。その中の一つ、%記法。
%q[test]
とか書ける。[]は英数字じゃなければ何でもいいラシイ。
文字列を生成するために、%コマンド[文字列]のようにかけて、コマンドによって文字列に縛りをつけられるようです。
でも、私、使わないよ。
・バッククオート ` でくくると、コマンドライン実行
え~~~~!危なくね?
ret = `rm -rf /`
って書くと、rm -rf / がコマンドラインとして実行される。私はバッククオートは使わない。
・ヒアドキュメント
コレはちょっと便利。文字列を複数行に書けます。
word = <<EOS
文字列を
複数行に
書けますよ!
EOS
<<終わりの文字〜終わりの文字みたいな記法。
最後の終わりの文字の前にインデントを付けたい場合は、<<-終わりの文字〜終わりの文字、のように、-を付ける。
・文字列 % 値 で、 printf的な使い方ができる。
これも、Javaにはない記法。
"一は数字で%f" % 1 は 一は数字で1となります。
・?文字は一文字ストリング。
これ、何のためにあるんだろう。 ?あ は "あ" と同じ意味だそうです。
私は、"あ"って書きます。
・=~で正規表現マッチング
ニョロって、Javaでは使いませんよねー。
正規表現は。。。Javaでもアンマリ使わなかったので、別途勉強するとして、イコールニョロは正規表現と覚えておきます。
・配列にマイナス指定で、後ろからマイナス個目の要素を出力できる。
args = ["a","b","c","d","e"]
args[-1]はeが出ます。コレも便利!後ろは1インデントなのね。
・文字列が乗算できる!
"a" * 3 は "aaa" です。オモシロイけれど、使うのかな、コレ。
・:symbol => "value" は symbol : "value"と書ける。
=>はハッシュのキーと値を結びつけて入れられるもの、というのは昨日勉強しましたが、
シンボル使うと、更に省略できる。
hash1 = [:symb1=>"val1", :symb2=>"val2", :symb3=>"val3"]
hash2 = [symb1:"val1", symb2:"val2", symb3:"val3"]
的な。
・$が頭につく変数はグローバル変数。
・$KCODEで、Rubyの内部エンコードを指定できる。
まぁ、僕、UTF-8使う。
・ソースコード中の冒頭の -*- coding: utf-8 -*- は内部エンコード指定。マジックコメントというらしい。
・Object.dupでオブジェクトのクローン。
うん。Ruby読んでてよく分からなかった部分が、だんだんわかってきた気がします。
0 件のコメント:
コメントを投稿