開発環境
- 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 コメント:
コメントを投稿