開発環境
- Microsoft Windows 8 Pro 64bit 日本語 (OS)
- Microsoft Visual Studio Express 2012 for Windows Desktop (IDE)
- プログラミング言語: C#
『初めてのC# 第2版』(Jesse Liberty+Brian MacDonald著、日向俊二訳、オライリー・ジャパン、2006年、ISBN978-487311-294-7)の 第13章(インタフェース)13.10(練習問題)練習13-3を解いてみる。
その他参考書籍
練習13-3.
コード
using System; interface IConvertible { string ConvertToCSharp(string str); string ConvertToVB(string str); } interface ICodechecker : IConvertible { bool CodeCheckSyntax(string str, string lang); } class ProgramHelper : ICodechecker { public ProgramHelper() { Console.WriteLine("ProgramHelperを作成"); } #region ICodeCheck #region IConvertible public string ConvertToCSharp(string str) { return "文字列をC#の文字列に変換中・・・"; } public string ConvertToVB(string str) { return "文字列をVisual Basicの文字列に変換中・・・"; } #endregion public bool CodeCheckSyntax(string str, string lang) { switch (lang) { case "C#": return true; case "Visual Basic": return true; default: return false; } } #endregion } class Tester { public void Run() { ProgramHelper ph = new ProgramHelper(); string str = "文字列"; string cs = "C#"; string vb = "Visual Basic"; string js = "JavaScript"; string py = "Python"; string[] langs = { cs, vb, js, py }; Console.WriteLine(ph.ConvertToCSharp(str)); Console.WriteLine(ph.ConvertToVB(str)); Console.WriteLine("構文チェック"); foreach (string lang in langs) { Console.WriteLine(ph.CodeCheckSyntax(str, lang)); } } static void Main() { Tester t = new Tester(); t.Run(); } }
入出力結果(Console Window)
ProgramHelperを作成 文字列をC#の文字列に変換中・・・ 文字列をVisual Basicの文字列に変換中・・・ 構文チェック True True False False 続行するには何かキーを押してください . . .
ちなみにJavaScriptの場合。
コード(TextWrangler)
// JavaScriptではインタフェースはない(?)のでとりあえず抽象クラスを定義してみることに // 実装し忘れた場合は例外を投げる var result = ""; var IConvertible = function(){}; IConvertible.prototype.convert_to_javascript = function(str){ throw "convert_to_javascriptが実装されていません。"; }; IConvertible.prototype.convert_to_python = function(str){ throw "convert_to_pythonが実装されていません。"; }; var ICodeCheckSyntax = function(){ IConvertible.apply(this); }; ICodeCheckSyntax.prototype = new IConvertible(); ICodeCheckSyntax.constructor = ICodeCheckSyntax; ICodeCheckSyntax.prototype.code_check_syntax = function(str, lang){ throw "code_check_syntaxが実装されていません。"; }; var ProgramHelper = function(){ $('#pre0').append('ProgramHelperを作成\n'); ICodeCheckSyntax.apply(this); }; ProgramHelper.prototype = new ICodeCheckSyntax(); ProgramHelper.constructor = ProgramHelper; ProgramHelper.prototype.convert_to_javascript = function(str){ return "文字列をJavaScriptの文字列に変換中・・・"; }; ProgramHelper.prototype.convert_to_python = function(str){ return "文字列をPythonの文字列に変換中・・・"; }; ProgramHelper.prototype.code_check_syntax = function(str, lang){ switch(lang){ case "JavaScript": return true; case "Python": return true; default: return false; } }; var ph = new ProgramHelper(); var str = "文字列"; var js = "JavaScript"; var py = "Python"; var pl = "Perl"; var rb = "Ruby"; var langs = [js, py, pl, rb]; result += ph.convert_to_javascript(str) + "\n"; result += ph.convert_to_python(str) + "\n"; result += "構文チェック\n"; for(var i = 0; i < langs.length; i++){ result += ph.code_check_syntax(str, langs[i]) + "\n"; } $('#pre0').append(result);
pythonの場合。
sample.py
コード(TextWrangler)
#!/usr/bin/env python3.3 # -*- coding: utf-8 -*- # pythonではインタフェースはない(?)のでクラスを定義 # C#では多重継承できないけど、pythonでは多重継承ができる class IConvertible: def convert_to_python(self, s): raise Exception("convert_to_pythonが実装されていません。") def convert_to_javascript(self, s): raise Exception("convert_to_javascriptが実装されていません。") class ICodeCheckSyntax(IConvertible): def code_check_syntax(self, s,lang): raise Exception("code_check_syntaxが実装されていません。") class ProgramHelper(ICodeCheckSyntax): def __init__(self): print("ProgramHelperを作成") def convert_to_python(self, s): print("文字列をPythonの文字列に変換中・・・") def convert_to_javascript(self, s): print("文字列をJavaScriptの文字列に変換中・・・") def code_check_syntax(self, s, lang): if lang == "Python" or lang == "JavaScript": return True else: return False ph = ProgramHelper() s = "文字列" py = "Python" js = "JavaScript" pl = "Perl" rb = "Ruby" langs = [py, js, pl, rb] ph.convert_to_python(s) ph.convert_to_javascript(s) print("構文チェック") for lang in langs: print(ph.code_check_syntax(s, lang))
入出力結果(Terminal)
$ ./sample.py ProgramHelperを作成 文字列をPythonの文字列に変換中・・・ 文字列をJavaScriptの文字列に変換中・・・ 構文チェック True True False False $
0 コメント:
コメントを投稿