2013年9月21日土曜日

開発環境

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

その他参考書籍

2.

コード(BBEdit)

sample.pl

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

{ package LivingCreature;
  sub speak {
      my $class = shift;
      if (@_) {
          say "a $class goes '@_'";
      } else {
          say "a $class goes ", $class->sound, "!";
      }
  }
}

{ package Person;
  sub sound { 'hmmmmm' }
  our @ISA = qw(LivingCreature);
}

{ package Animal;
  our @ISA = qw(LivingCreature);
  sub sound {
      die '動物のsoundが定義されていない!';
  }
  sub speak {
     my $class = shift;
     if (@_) {
         warn "ドリトル博士ではないので、動物と話はできません!" if @_;
     } else {
         $class->SUPER::speak;
     }
 }
}

{ 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;
      say "[but you can barely hear it!]";
  }
}

Person->speak('Hi');
Person->speak;
Cow->speak;
Cow->speak("Hi");
Horse->speak;

入出力結果(Terminal)

$ ./sample.pl
a Person goes 'Hi'
a Person goes hmmmmm!
a Cow goes moooo!
ドリトル博士ではないので、動物と話はできません! at ./sample.pl line 34.
動物のsoundが定義されていない! at ./sample.pl line 29.
$

ちなみにpython3.3の場合。

コード(BBEdit)

sample.py

#!/usr/bin/env python3.3
## Copyright (C) 2013 by kamimura
#-*- coding: utf-8 -*-

import sys

class LivingCreature:
    def speak(self, words=None):
        if words:
            print("a {0} goes '{1}'".format(
                self.__class__.__name__, words))
        else:
            print('a {0} goes {1}!'.format(
                self.__class__.__name__, self.sound()))

class Person(LivingCreature):
    def sound(self):
        return 'hmmmmm'

class Animal(LivingCreature):
    def sound(self):
        print('動物のsoundが定義されていない')
        sys.exit()
    def speak(self, words=None):
        if words:
            print('ドリトル博士ではないので、動物と話はできません!')
        else:
            print('a {0} goes {1}!'.format(
                self.__class__.__name__, self.sound()))

class Cow(Animal):
    def sound(self):
        return 'moooo'

class Horse(Animal): pass
#    def sound(self):
#        return 'neigh'

class Sheep(Animal):
    def sound(self):
        return 'baaaah'

class Mouse(Animal):
    def sound(self):
        return 'squeak'
    def speak(self):
        Animal.speak(self)
        print('[but you can barely hear it!]')

animals = {'Animal':Animal, 'Cow': Cow, 'Horse': Horse, 'Sheep': Sheep,
           'Mouse': Mouse}

person = Person()
cow = Cow()
horse = Horse()
person.speak('Hi')
person.speak()
cow.speak()
cow.speak('Hi')
horse.speak()
cow.speak('Hi')

入出力結果(Terminal)

$ ./sample.py
a Person goes 'Hi'
a Person goes hmmmmm!
a Cow goes moooo!
ドリトル博士ではないので、動物と話はできません!
動物のsoundが定義されていない
$

0 コメント:

コメントを投稿