2014年9月5日金曜日

開発環境

Head First C ―頭とからだで覚えるCの基本(David Griffiths (著)、Dawn Griffiths (著) 中田 秀基(監訳)(翻訳)、木下 哲也 (翻訳)、オライリージャパン)の6章(データ構造と動的メモリ: 架け橋を築く)、自分で考えてみよう(p.289)をSwiftで考えてみる。

自分で考えてみよう(p.289)

C言語と違ってGC(Garbage collection)があるから、Pythonのコードの時と同様に、ポインタ、ヒープ領域のメモリ空間の取得の取得、解放を気にする必要がない?

コード(Xcode)

main.swift

//
//  main.swift
//  sample289
//
//  Created by kamimura on 9/5/14.
//  Copyright (c) 2014 kamimura. All rights reserved.
//

import Foundation

// GC(がベージコレクション)があるから、C言語みたいにメモリーの解放を気にする必要はない
class Island {
    let name:String
    let opens:String
    let closes:String
    var next:Island?
    
    init(name:String, opens:String = "9:00", closes:String = "17:00", next:Island? = nil) {
        self.name = name
        self.opens = opens
        self.closes = closes
        self.next = next
    }
    
    func display() {
        println("名前:\(self.name)\n 営業時間:\(self.opens)-\(self.closes)")
        self.next?.display()
    }
}

var start:Island?
var i:Island?
var next:Island?

while true {
    let name:String = input()
    if name == "" {
        break
    }
    next = Island(name: name)
    if start == nil {
        start = next
    } else {
        i?.next = next
    }
    i = next
}

start?.display()

stdio.swift

//
//  stdio.swift
//  stdio
//
//  Created by kamimura on 8/21/14.
//  Copyright (c) 2014 kamimura. All rights reserved.
//

import Foundation

// 標準入力(STDIN)から読み込む
func input(msg:String = "") -> String {
    print(msg)
    var in_fh = NSFileHandle.fileHandleWithStandardInput()
    var data = in_fh.availableData
    var s = NSString(data: data, encoding: NSUTF8StringEncoding)
    s = s.substringToIndex(s.length - 1)
    return s
}

func read(path:String) -> String? {
    return String.stringWithContentsOfFile(path)
}

func print(s:String, path:String, end:String = "\n") {
    (s + end).writeToFile(path, atomically: true, encoding: NSUTF8StringEncoding, error: nil)
}

func error(msg:String) {
    let stderr = NSFileHandle.fileHandleWithStandardError()
    stderr.writeData((msg + "\n").dataUsingEncoding(NSUTF8StringEncoding)!)
    exit(1)
}

// コマンドライン引数
let argv:[String] = NSProcessInfo.processInfo().arguments.map({(x:AnyObject) -> String in x as String})

入出力結果(Console Output, Terminal)

$ ./sample289 
アトランティス
ティッチマーシュ島

名前:アトランティス
 営業時間:9:00-17:00
名前:ティッチマーシュ島
 営業時間:9:00-17:00
$

0 コメント:

コメントを投稿