2013年3月19日火曜日

開発環境

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

その他参考書籍

プログラムロガー

コード(BBEdit)

sample.rb

#!/usr/bin/env ruby2.0
#-*- 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)

var $result = $('#pre0'),
    log = function( d, fn ) {
        var result;
        $result.append('"' + d + '"を開始…\n');
        result = fn();
        $result.append('…"' + d + '"が終了して、戻り値は\n');
        $result.append(result + '\n');
    };
$result.html('');
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(d,fun):
    print("\"{0}\"を開始…".format(d))
    res = fun()
    print("…\"{0}\"が終了して、戻り値は".format(d))
    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 myLog{
    my($description, $f) = @_;
    print "\"$description\"を開始…\n";
    my $result = &$f;
    print "…\"$description\"が終了して、戻り値は\n";
    print "$result\n";
}
myLog( "外側のブロック", sub {
    myLog("小さなブロック", sub{ 5 });
    myLog("また別のブロック", sub { "私はタイ料理が好き!" });
    return 0;
});

入出力結果(Terminal)

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

0 コメント:

コメントを投稿