2013年2月9日土曜日

開発環境

『続・初めてのPerl 改訂版』(Randal L. Schwartz, brian d foy, Tom Phoenix 著、伊藤 直也田中 慎司吉川 英興 監訳、株式会社ロングテール/長尾 高弘 訳、オライリー・ジャパン、2006年、ISBN4-87311-305-9)の12章(データのあるオブジェクト), 12.15(練習問題)1.を解いてみる。

その他参考書籍

1.

コード(BBEdit)

sample.pl

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use 5.016;
binmode STDOUT, ':utf8';
binmode STDIN, ':utf8';

{
    package Animal;
    sub sound {die "動物のsoundを定義し忘れてる!";}
    sub named {
        my $class = shift;
        my $name = shift;
        my $self = {Name => $name, Color => $class->default_color};
        bless $self, $class;
    }
    sub speak {
        my $either =  shift;
        print $either->name, " goes ", $either->sound, "\n";
    }
    sub name {
        my $either = shift;
        ref $either ? $either->{Name} : "an unnamed $either";
    }
    sub default_color {'brown'}
    sub color {
        my $either = shift;
        ref $either ? $either->{Color} : $either->default_color;
    }
    sub set_name {
        my $self = shift;
        $self->{Name} = shift;
    }
    sub set_color {
        my $self = shift;
        $self->{Color} = shift;
    }
}
{
    package Cow;
    our @ISA = qw(Animal);
    sub sound { "moooo" }
}
{
    package Horse;
    our @ISA = qw(Animal);
    sub sound { "neigh" }
}
{
    package Sheep;
    our @ISA = qw(Animal);
    sub sound { "baaaah" }
}
{
    package Mouse;
    our @ISA = qw(Animal);
    sub sound { "squeak" }
    sub speak {
        my $class = shift;
        $class->SUPER::speak;
        print "[but you can barely hear it!]\n";
    }
}

my $tv_horse = Horse->named('Mr. Ed');
$tv_horse->set_name('Mister Ed');
$tv_horse->set_color('grey');
print $tv_horse->name, " is ", $tv_horse->color, "\n";
print Sheep->name, ' colored ', Sheep->color, " goes ", Sheep->sound, "\n";

入出力結果(Terminal)

$ ./sample.pl
Mister Ed is grey
an unnamed Sheep colored brown goes baaaah
$

ちなみにJavaScriptの場合。

コード(BBEdit)

$('#pre0').html('');
var Animal = function (o) {
    var n = o,
        color = "brown",
        sound = "鳴き声";
    this.speak = function() {
        $('#pre0').append(n + " goes " + sound + "\n");
    },
    this.setName = function( o ) {
        n = o;
    },
    this.getName = function( ) {
        return n;
    },
    this.setColor = function( o ) {
        color = o;
    },
    this.getColor = function (  ) {
        return color;
    };
},
    Cow = function () {
        var sound = "moooo";
        Animal.apply(this);
    },
    Horse = function () {
        var sound = "neigh";
        Animal.apply(this);
    },
    Sheep = function () {
        var sound = "baaaah";
        Animal.apply(this);
    },
    tv_horse;
Animal.o = "an unnamed Animal";
Animal.color = Cow.color = Horse.color = Sheep.color = "brown";
Animal.sound = "鳴き声";
Cow.prototype = new Animal();
Cow.o = "an unnamed Cow";
Cow.sound = "moooo";
Horse.prototype = new Animal();
Horse.o = "an unnamed Horse";
Horse.sound = "neigh";
Sheep.prototype = new Animal();
Sheep.o = "an unnamed Sheep";
Sheep.sound = "baaaah";
tv_horse = new Horse("Mr. Ed");
tv_horse.setName("Mister Ed");
tv_horse.setColor("grey");
$('#pre0').append(tv_horse.getName() + " is " + tv_horse.getColor() + "\n");
$('#pre0').append(Sheep.o + " colored " + Sheep.color + " goes " + Sheep.sound + "\n");



pythonの場合。

コード(BBEdit)

sample.py

#!/usr/bin/env python3.3
#-*- coding: utf-8 -*-

class Animal:
    name = "Animal"
    sound = "鳴き声"
    color = "brown"
    def __init__(self, name):
        self._name = Animal.name
        self._sound = Animal.sound
        self._color = Animal.color
    def getName(self):
        return self._name
    def setName(self, name):
        self._name = name
    def getColor(self):
        return self._color
    def setColor(self, color):
        self._color = color
    def speak(self):
        print("{0} goes {1}".format(self._name, self._sound))
    @staticmethod
    def staticSpeak():
        print("{0} goes {1}".format(Animal.name, Animal.sound))

class Cow(Animal):
    name = "Cow"
    sound = "moooo"

class Horse(Animal):
    name = "Horse"
    sound = "neigh"
class Sheep(Animal):
    name = "Sheep"
    sound = "baaaah"
class Mouse(Animal):
    name = "Mouse"
    sound = "squeak"
    def speak(self):
        Animal.speak(self)
        print("[but you can barely hear it!]")

tv_horse = Horse("Mr.Ed")
tv_horse.setName("Mister Ed")
tv_horse.setColor("grey")
print("{0} is {1}".format(tv_horse.getName(), tv_horse.getColor()))
print("{0} colored {1} goes {2}".format(Sheep.name, Sheep.color, Sheep.sound))

入出力結果(Terminal)

$ ./sample.py
Mister Ed is grey
Sheep colored brown goes baaaah
$

0 コメント:

コメントを投稿