2013年1月4日金曜日

開発環境

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

その他参考書籍

プログラムロガー

コード(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 コメント:

コメントを投稿