2013年3月1日金曜日

開発環境

『初めてのC# 第2版』(Jesse Liberty+Brian MacDonald著、日向俊二訳、オライリー・ジャパン、2006年、ISBN978-487312-194-7)の 第13章(インタフェース)13.10(練習問題)練習13-3.を解いてみる。

その他参考書籍

練習13-3.

コード

using System;

interface IConvertible
{
    string ConvertToCSharp(string str);
    string ConvertToJavaScript(string str);
}

interface ICodeChecker : IConvertible
{
    bool CodeCheckSyntax(string s, string lang);
}
class ProgramHelper : ICodeChecker
{
    public ProgramHelper()
    {
        Console.WriteLine("ProgramHelperを作成");
    }
    #region ICodeChecker
    #region IConvertible
    public string ConvertToCSharp(string str)
    {
        return "C#の文字列に変換中…";
    }
    public string ConvertToJavaScript(string str)
    {
        return "JavaScriptの文字列に変換中…";
    }
    #endregion
    public bool CodeCheckSyntax(string s, string lang)
    {
        switch (lang)
        {
            case "C#":
            case "JavaScript": return true;
            default:
                return false;
        }
    }
    #endregion
}

class Tester
{
    public void Run()
    {
        ProgramHelper ph = new ProgramHelper();
        string s = "文字列";
        string cs = "C#";
        string js = "JavaScript";
        string py = "Python";
        string[] langs = { cs, js, py };
        foreach (string lang in langs)
        {
            Console.WriteLine("{0}: {1}", lang, ph.CodeCheckSyntax(s, lang));
        }
    }
    static void Main()
    {
        Tester t = new Tester();
        t.Run();
    }
}

入出力結果(Console Window)

ProgramHelperを作成
C#: True
JavaScript: True
Python: False
続行するには何かキーを押してください . . .

ちなみにJavaScriptの場合。

コード(BBEdit)

$('#pre0').text('');
var result = "",
    IConvertible = function(  ) { },
    ICodeChecker = function () {
        IConvertible.apply(this, arguments);
    },
    ProgramHelper = function(  ) {
        result += "ProgramHelperを作成\n";
        ICodeChecker.apply(this, arguments);
    },
    s = "文字列",
    js = "JavaScript",
    cs = "C#",
    py = "Python",
    langs = [js, cs, py],
    ph, i, max;
IConvertible.prototype.convertToCSharp = function (  ) {
    throw "convertToCSharpを実装していない";
},
IConvertible.prototype.convertToJavaScript = function ( ) {
    throw "convertToJavaScriptを実装していない";
},
ICodeChecker.prototype = new IConvertible(),
ICodeChecker.prototype.codeCheckSyntax = function (s, lang){
    throw "CodeCheckSyntaxを実装していない";
},
ProgramHelper.prototype = new ICodeChecker(),
ProgramHelper.prototype.convertToCSharp = function( s ) {
    return "C#の文字列に変換中…";
},
ProgramHelper.prototype.convertToJavaScript = function ( s ) {
    return "JavaScriptの文字列に変換中…";
},
ProgramHelper.prototype.codeCheckSyntax = function ( s, lang ) {
    switch ( lang ) {
        case "C#":
            return true;
        case "JavaScript":
            return true;
        default:
            return false;
    }
},
ph = new ProgramHelper();
for (i = 0, max = langs.length; i < max; i += 1) {
    result += langs[i] + ": " + ph.codeCheckSyntax(s, langs[i]) + "\n";
}
$('#pre0').text(result);



pythonの場合。

コード(BBEdit)

sample.py

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

class IConvertible:
    def convertToJavaScriprt(self, s):
        raise Exception("convertToJavaScriprtが定義されていない")
    def convertToPython(self, s):
        raise Exception("convertToPythonが定義されていない")
class ICodeChecker(IConvertible):
    def codeCheckSyntax(self, s, lang):
        raise Exception("codeCheckSyntax")
class ProgramHelper(IConvertible):
    def __init__(self):
        print("ProgramHelperを作成")
    def convertToJavaScriprt(self, s):
        return "JavaScriptの文字列に変換中…"
    def convertToPython(self, s):
        return "Pythonの文字列に変換中…"
    def codeCheckSyntax(self, s, lang):
        if lang == "Python" or lang == "JavaScript":
            return True
        return False

ph = ProgramHelper()
s = "文字列"
for x in ["JavaScript", "Python", "C#"]:
    print("{0}: {1}".format(x, ph.codeCheckSyntax(s, x)))

入出力結果(Terminal)

$ ./sample.py
ProgramHelperを作成
JavaScript: True
Python: True
C#: False
$

0 コメント:

コメントを投稿