開発環境
- Microsoft Windows 8 Pro 64bit 日本語 (OS)
- Microsoft Visual Studio Express 2012 for Windows Desktop (IDE)
- プログラミング言語: C#
『初めてのC# 第2版』(Jesse Liberty+Brian MacDonald著、日向俊二訳、オライリー・ジャパン、2006年、ISBN978-487312-194-7)の 第12章(演算子のオーバーロード)12.6(練習問題)練習12-2を解いてみる。
その他参考書籍
練習12-2.
コード
using System; class Invoice { private string vendor; private int amount; public Invoice(string vendor, int amount) { this.vendor = vendor; this.amount = amount; } public string Vendpor { get { return vendor; } set { vendor = value; } } public int Amount { get { return amount; } set { amount = value; } } public static Invoice operator +(Invoice lhs, Invoice rhs) { if (lhs.vendor == rhs.vendor) { return new Invoice(lhs.vendor, lhs.amount + rhs.amount); } else { return new Invoice("", 0); } } public override string ToString() { return vendor + " " + amount; } public static bool operator ==(Invoice lhs, Invoice rhs) { if (lhs.vendor == rhs.vendor && lhs.amount == rhs.amount) { return true; } return false; } public static bool operator !=(Invoice lhs, Invoice rhs) { return !(lhs == rhs); } public override bool Equals(object obj) { if (!(obj is IAppDomainSetup)) return false; return this == (Invoice)obj; } public override int GetHashCode() { return base.GetHashCode(); } } class Tester { public void Run() { Invoice yamato = new Invoice("Yamato", 5); Invoice yamato1 = new Invoice("Yamato", 5); Invoice yamato2 = new Invoice("Yamato", 10); Invoice sagawa1 = new Invoice("Sagawa", 5); Invoice sagawa2 = new Invoice("Sagawa", 10); Invoice[] invoices = { yamato1, yamato2, sagawa1, sagawa2 }; Console.WriteLine("{0}と同じかどうか", yamato); foreach (Invoice invoice in invoices) { string s = yamato == invoice ? "同じ" : "異なる"; Console.WriteLine("{0}: {1}", invoice, s); } } static void Main() { Tester t = new Tester(); t.Run(); } }
入出力結果(Console Window)
Yamato 5と同じかどうか Yamato 5: 同じ Yamato 10: 異なる Sagawa 5: 異なる Sagawa 10: 異なる 続行するには何かキーを押してください . . .
ちなみにJavaScriptの場合。
コード(BBEdit)
function Invoice(vendor, amount){ var vendor = vendor; var amount = amount; this.__defineGetter__("vendor", function(){ return vendor}); this.__defineSetter__("vendor", function(val){ vendor = val;}); this.__defineGetter__("amount", function(){ return amount;}); this.__defineSetter__("amount", function(val){ amount = val;}); this.add = function(other){ if(vendor === other.vendor){ return new Invoice(vendor, amount + other.amount); } else { return new Invoice("", 0); } }; this.toString = function(){ return vendor + " " + amount; }; this.equals = function(o){ if(!(o instanceof Invoice)) return false; if(this.vendor === o.vendor && this.amount === o.amount){ return true; } return false; }; } var yamato = new Invoice("Yamato", 5); var yamato1 = new Invoice("Yamato", 5); var yamato2 = new Invoice("Yamato", 10); var sagawa1 = new Invoice("Sagawa", 5); var sagawa2 = new Invoice("Sagawa", 10); var invoices = [yamato1, yamato2, sagawa1, sagawa2]; var result = yamato.toString() + "と等価かどうか\n"; for(var i = 0; i < invoices.length; i++){ result += invoices[i].toString() + ": "; result += invoices[i].equals(yamato) ? "同じ": "異なる"; result += "\n"; } $('#pre0').text(result);
pythonの場合。
sample.py
コード(BBEdit)
#!/usr/bin/env python3.3 # -*- coding: utf-8 -*- class Invoice: def __init__(self, vendor, amount): self._vendor = vendor self._amount = amount def get_vendor(self): return self._vendor def set_vendor(self, val): self._vendor = val def get_amount(self): return self._amount def set_amount(self, val): self._amount = val def __add__(self, other): if self._vendor == other._vendor: return Invoice(self._vendor, self._amount + other._amount) else: return Invoice("", 0) def __str__(self): return "{0} {1}".format(self._vendor, self._amount) def __eq__(self, other): if type(self) != type(other): return false if self._vendor == other._vendor and self._amount == other._amount: return True return False def __bool__(self, other): return not self == other if __name__ == '__main__': yamato = Invoice("yamato", 5) yamato1 = Invoice("yamato", 5) yamato2 = Invoice("yamato", 10) sagawa1 = Invoice("sagawa", 5) sagawa2 = Invoice("sagawa", 10) print("{0}と同じかどうか".format(yamato)) for x in [yamato1, yamato2, sagawa1, sagawa2]: result = "同じ" if yamato == x else "異なる" print("{0}: {1}".format(x, result))
入出力結果(Terminal)
$ ./sample.py yamato 5と同じかどうか yamato 5: 同じ yamato 10: 異なる sagawa 5: 異なる sagawa 10: 異なる $
0 コメント:
コメントを投稿