開発環境
- OS X Lion - Apple(OS)
- BBEdit - Bare Bones Software, Inc.(Text Editor)
- Script言語:Ruby
『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の 14章(ブロックとproc), 14.4(練習問題)プログラムロガー を解いてみる。
その他参考書籍
- 『プログラミング言語 Ruby』David Flanagan, まつもと ゆきひろ 著 、卜部 昌平 監訳、長尾 高弘 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-394-4)
- Rubyクックブック ―エキスパートのための応用レシピ集
プログラムロガー
コード(BBEdit)
sample.rb
#!/usr/bin/env ruby1.9
#-*- coding: utf-8 -*-
def log description, &block
puts "\"#{description}\"を開始..."
res = block.call
puts "...\"#{description}\"が終了して、戻り値は"
puts res
end
log "外側のブロック" do
log "小さなブロック" do
5
end
log "また別のブロック" do
"私はタイ料理が好き"
end
false
end
入出力結果(Terminal)
$ ./sample.rb "外側のブロック"を開始... "小さなブロック"を開始... ..."小さなブロック"が終了して、戻り値は 5 "また別のブロック"を開始... ..."また別のブロック"が終了して、戻り値は 私はタイ料理が好き ..."外側のブロック"が終了して、戻り値は false $
ちなみにJavaScriptの場合。
コード(BBEdit)
function log(description, f){
$('#pre0').append("\"" + description + "\"を開始...\n");
var res = f();
$('#pre0').append("...\"" + description + "\"が終了して、戻り値は\n");
$('#pre0').append(res + "\n");
}
log("外側のブロック", function(){
log("小さなブロック", function(){
return 5;
})
log("また別のブロック", function(){
return "私はタイ料理が好き!";
});
return false;
});
pythonの場合。
sample.py
コード(BBEdit)
#!/usr/bin/env python3.3
# -*- coding: utf-8 -*-
def log(description, func):
print("\"{0}\"を開始...".format(description))
res = func()
print("...\"{0}\"のブロックが終了して、戻り値は".format(description))
print(res)
def f():
log("小さなブロック", lambda: 5)
log("また別のブロック", lambda: "私はタイ料理が好き")
return False
log("外側のブロック", f)
入出力結果(Terminal)
$ ./sample.py "外側のブロック"を開始... "小さなブロック"を開始... ..."小さなブロック"のブロックが終了して、戻り値は 5 "また別のブロック"を開始... ..."また別のブロック"のブロックが終了して、戻り値は 私はタイ料理が好き ..."外側のブロック"のブロックが終了して、戻り値は False $
perlの場合。
sample.pl
コード(BBEdit)
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use 5.016;
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";
sub my_log{
my($description, $f) = @_;
print "\"" . $description . "\"を開始...\n";
my $res = &$f;
print "...\"" . $description . "\"が終了して戻り値は\n";
print $res . "\n";
}
my_log "外側のブロック", sub{
my_log("小さなブロック", sub{
5;
});
my_log("また別のブロック", sub{
"私はタイ料理が好き!";
});
0;
};
入出力結果(Terminal)
$ ./sample.pl "外側のブロック"を開始... "小さなブロック"を開始... ..."小さなブロック"が終了して戻り値は 5 "また別のブロック"を開始... ..."また別のブロック"が終了して戻り値は 私はタイ料理が好き! ..."外側のブロック"が終了して戻り値は 0 $
0 コメント:
コメントを投稿