2014年8月26日火曜日

開発環境

Head First C ―頭とからだで覚えるCの基本(David Griffiths (著)、Dawn Griffiths (著) 中田 秀基(監訳)(翻訳)、木下 哲也 (翻訳)、オライリージャパン)の5章(構造体、共用体、ビットフィールド: 独自の構造を使う)、長いエクササイズ(p.228)をSwiftで考えてみる。

長いエクササイズ(p.228)

コード(Xcode)

main.swift

//
//  main.swift
//  sample228
//
//  Created by kamimura on 8/26/14.
//  Copyright (c) 2014 kamimura. All rights reserved.
//

import Foundation

println("構造体バージョン")
var fish:Fish = Fish(
    name: "スナッピー",
    species: "ピラニア",
    teeth: 69,
    age: 4,
    care: Preferences(
        food: Meal(
            ingredients: "肉",
            weight: 0.1),
        exercise: Exercise(
            description: "ジャグジーでの泳ぎ",
            duration: 7.5)))

println(fish.catalog)
println(fish.care.label)

println("クラスバージョン")
var fish1:Fish1 = Fish1(name:"スナッピー", species:"ピラニア", teeth:69, age:4, ingredients:"肉", weight:0.1,
    description:"ジャグジーでの泳ぎ", duration:7.5)

println(fish1.catalog)
println(fish1.label)

struct.swift

//
//  struct.swift
//  sample228
//
//  Created by kamimura on 8/26/14.
//  Copyright (c) 2014 kamimura. All rights reserved.
//

import Foundation

struct Exercise {
    let description:String;
    var duration:Double;
}

struct Meal {
    let ingredients:String
    var weight:Double;
}

struct Preferences {
    var food:Meal
    var exercise:Exercise;
    var label:String { return "餌は\(self.food.weight)キロの\(self.food.ingredients)を与え、" +
        "\(self.exercise.description)を\(self.exercise.duration)時間行わせます。" }
}

struct Fish {
    let name:String;
    let species:String;
    var teeth:Int;
    var age:Int
    var care:Preferences;
    var catalog:String { return "\(self.name)は\(self.species)であり、歯は\(self.teeth)本あります。年齢は\(self.age)才です。"  }
}

Pythonの時みたいにclassを使った場合。(Swiftは、Pythonのような多重継承は出来ないみたい。)

class.swift

//
//  class.swift
//  sample228
//
//  Created by kamimura on 8/26/14.
//  Copyright (c) 2014 kamimura. All rights reserved.
//

import Foundation

class Exercise1 {
    let description:String
    var duration:Double
    init (description:String, duration:Double) {
        self.description = description
        self.duration = duration
    }
}

class Meal1 {
    let ingredients:String
    var weight:Double
    init(ingredients:String, weight:Double) {
        self.ingredients = ingredients
        self.weight = weight
    }
}


class Preferences1 {
    var food:Meal1
    var exercise:Exercise1
    init(ingredients:String, weight:Double, description:String, duration:Double) {
        self.food = Meal1(ingredients: ingredients, weight: weight)
        self.exercise = Exercise1(description: description, duration: duration)
    }
    var label:String { return "餌は\(self.food.weight)キロの\(self.food.ingredients)を与え、" +
        "\(self.exercise.description)を\(self.exercise.duration)時間行わせます。" }
}

class Fish1: Preferences1 {
    let name:String
    let species:String
    var teeth:Int
    var age:Int
    init(name:String, species:String, teeth:Int, age:Int, ingredients:String, weight:Double, description:String,
        duration:Double) {
            self.name = name
            self.species = species
            self.teeth = teeth
            self.age = age
            super.init(ingredients:ingredients, weight:weight, description:description, duration:duration)
    }
    var catalog:String { return "\(self.name)は\(self.species)であり、歯は\(self.teeth)本あります。年齢は\(self.age)才です。"  }
}

入出力結果(Console Output, Terminal)

構造体バージョン
スナッピーはピラニアであり、歯は69本あります。年齢は4才です。
餌は0.1キロの肉を与え、ジャグジーでの泳ぎを7.5時間行わせます。
クラスバージョン
スナッピーはピラニアであり、歯は69本あります。年齢は4才です。
餌は0.1キロの肉を与え、ジャグジーでの泳ぎを7.5時間行わせます。
Program ended with exit code: 0

0 コメント:

コメントを投稿