2013年2月11日月曜日

開発環境

『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の 14章(block と proc), 14.4(練習問題)プログラムロガー を解いてみる。

その他参考書籍

プログラムロガー

コード(BBEdit)

sample.rb

#!/usr/bin/env ruby1.9
#-*- coding: utf-8 -*-

def log description, &block
    puts "\"#{description}\"を開始"
    result = block.call
    puts "...\"#{description}\"が終了して、戻り値は"
    puts result
end
log "外側のブロック" do
    log "小さなブロック" do
        5
    end
    log "また別のグロック" do
        "私はタイ料理が好き"
    end
    false
end

入出力結果(Terminal)

$ ./sample.rb
"外側のブロック"を開始
"小さなブロック"を開始
..."小さなブロック"が終了して、戻り値は
5
"また別のグロック"を開始
..."また別のグロック"が終了して、戻り値は
私はタイ料理が好き
..."外側のブロック"が終了して、戻り値は
false
$

ちなみにJavaScriptの場合。

コード(BBEdit)

$('#pre0').html('');
function log( description, f ) {
    $('#pre0').append("\"" + description + "\"を開始...\n");
    var result = f();
    $('#pre0').append("...\"" + description + "\"が終了して、戻り値は\n");
    $('#pre0').append(result + "\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, f):
    print("\"{0}\"を開始...".format(description))
    result = f()
    print("...\"{0}が終了して戻り値は".format(description))
    print(result)

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 $result = &$f;
    print "...\"$description\"が終了して、戻り値は\n";
    print "$result\n";
}
my_log("外側のブロック", sub {
    my_log("小さなブロック", sub {
        5;
    });
    my_log("また別のブロック", sub {
        "私はタイ料理が好き";
    });
    0;
});

入出力結果(Terminal)

$ ./sample.pl
"外側のブロック"を開始...
"小さなブロック"を開始...
..."小さなブロック"が終了して、戻り値は
5
"また別のブロック"を開始...
..."また別のブロック"が終了して、戻り値は
私はタイ料理が好き
..."外側のブロック"が終了して、戻り値は
0
$

0 コメント:

コメントを投稿