2013年3月13日水曜日

開発環境

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

その他参考書籍

練習16-1.

コード

using System;
using System.Collections.Generic;

class Cat
{
    private int age;
    public Cat(int age)
    {
        this.age = age;
    }
    public int Age
    {
        get { return age; }
    }
}

class Tester
{
    public void Run()
    {
        try
        {
            Console.WriteLine("Catオブジェクトの割り当て開始");
            Cat tama = new Cat(5);
            Cat sora = new Cat(10);
            List<Cat> cats = new List<Cat>();
            cats.Add(tama);
            cats.Add(sora);
            Console.WriteLine("{0}, {1}", cats[0].Age, cats[1].Age);
            // ここで例外発生
            Console.WriteLine(cats[2]);
            Console.WriteLine("tryブロック終了");
        }
        catch (ArgumentException e)
        {
            Console.WriteLine(e.Message);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
        finally
        {
            Console.WriteLine("Catオブジェクトの割り当て解除");
        }
    }
    static void Main()
    {
        Tester t = new Tester();
        t.Run();
    }
}

入出力結果(Console Window)

Catオブジェクトの割り当て開始
5, 10
インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さく
なければなりません。
パラメーター名: index
Catオブジェクトの割り当て解除
続行するには何かキーを押してください . . .

ちなみにJavaScriptの場合。

コード(BBEdit)

try{
    var Cat = function ( age ) {
        var age = age;
        this.getAge = function( ) {
            return age;
        };
    },
        tama = new Cat(5),
        sora = new Cat(10),
        cats = [tama, sora],
        result = "",
        i, max;
    for (i = 0, max = cats.length; i < max; i += 1) {
        result += cats[i].getAge() + "\n";
    }
    // C#の場合と違い、JavaScriptではcats[2]にアクセスすることはundefinedになるだけで例外にならない
    // ただし、undefinedでgetAgeを呼び出すところで例外になる
    result += cats[2] + "\n";
    result += cats[2].getAge() + "\n";
    result += "tryブロック終了\n";
} catch (e) {
    result += e;
} finally {
    $('#pre0').text(result);
}



pythonの場合。

コード(BBEdit)

sample.py

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

class Cat:
    def __init__(self, age):
        self._age = age
    def getAge(self):
        return self._age

try:
    tama = Cat(5)
    sora = Cat(10)
    cats = [tama, sora]
    for cat in cats:
        print(cat.getAge())
    print(cats[2].getAge())
    print("tryブロック終了")

except Exception as err:
    print(type(err))
    print(err.args)
    print(err)
finally:
    print("Catオブジェクトの割り当て解除")

入出力結果(Terminal)

$ ./sample.py
5
10
<class 'IndexError'>
('list index out of range',)
list index out of range
Catオブジェクトの割り当て解除
$

0 コメント:

コメントを投稿