2012年12月8日土曜日

開発環境

『初めての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 コメント:

コメントを投稿