ぜのぜ

しりとりしようぜのぜのぜのぜ

45日目

日記

今日買い物にでかけたら地獄のように暑かったので明日の行き先を変更した.数カ月ぶりのライドなので安全めに行きたい.

今日書いたコード

class Hoge {
    let hoge: String

    init() {
        hoge = "super hoge"
    }
}

class Fuga: Hoge {
    override init() {
        hoge = "sub hoge" // Cannot assign to property: 'hoge' is a 'let' constant
    }
}

初めて知ったこと

スーパークラスletで宣言されたプロパティはサブクラスのイニシャライザで初期化できない.

43日目

日記

デバフがかかっている

今日書いたコード

class Vehicle {
    var currentSpeed = 0.0
    var description: String {
        return "traveling at \(currentSpeed) kilometer per hour"
    }
    func makeNoise() {
        // do nothing - an arbitrary vehicle doesn't necessarily make a noise
    }
}
let someVehicle = Vehicle()
print("Vehicle: \(someVehicle.description)")

class Bicycle: Vehicle {
    var hasBasket = false
}
let someBicycle = Bicycle()
someBicycle.hasBasket = true
someBicycle.currentSpeed = 15.0
print(someBicycle.description)

class Train: Vehicle {
    override func makeNoise() {
        print("Choo Choo")
    }
}

let train = Train()
train.makeNoise()
// Prints "Choo Choo"

class Car: Vehicle {
    var gear = 1
    override var description: String {
        return super.description + " in gear \(gear)"
    }
}

let car = Car()
car.currentSpeed = 25.0
car.gear = 3
print("Car: \(car.description)")
// Car: traveling at 25.0 miles per hour in gear 3

初めて知ったこと

なし

42日目

日記

今日2回目のワクチン接種を受けた.1回目は次の日になって筋肉痛のような痛みが出てきた気がするが,今回はすでに痛くなっている.このままひどくならないといいが.

(このブログにはこの日以降何も書き込まれていない)

今日書いたコード

class Vehicle {
    var currentSpeed = 0.0
    var description: String {
        return "traveling at \(currentSpeed) kilometer per hour"
    }
    func makeNoise() {
        // do nothing - an arbitrary vehicle doesn't necessarily make a noise
    }
}
let someVehicle = Vehicle()
print("Vehicle: \(someVehicle.description)")

class Bicycle: Vehicle {
    var hasBasket = false
}
let someBicycle = Bicycle()
someBicycle.hasBasket = true
someBicycle.currentSpeed = 15.0
print(someBicycle.description)

初めて知ったこと

なし

41日目 Type Subscripts

日記

自分の家が一番落ち着く

今日書いたコード

enum Planet: Int {
    case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune
    static subscript(n: Int) -> Planet {
        return Planet(rawValue: n)!
    }
}
let mars = Planet[4]
print(mars)

enum Env {
    static var envs: [String: String] = [:]

    static subscript(_ name: String) -> String? {
        get {
            return envs[name]
        }
        set {
            envs[name] = newValue
        }
    }
}
Env["hoge"] = "hoge"
print(Env["hoge"])

初めて知ったこと

staticなsubscriptを定義できること.これはSwift 5.1で実装された比較的新しい機能で,例えば環境変数を表すのに丁度いいよねといったことがプロポーザルに書いてある.

以前何回か使い方はよくわからないって書いたことあったけど,プロポーザルを読めばわかりそうなので今後は読んでいきたい.OSS最高です.

40日目

日記

今日も酒を飲んだ.そういえばいつか言ったお気に入りの生主が放送を続けてくれていて嬉しい.

今日書いたコード

struct Matrix {
    let rows: Int, columns: Int
    var grid: [Double]

    init(rows: Int, columns: Int) {
        self.rows = rows
        self.columns = columns
        grid = Array(repeating: 0.0, count: rows * columns)
    }

    func indexIsValid(row: Int, column: Int) -> Bool {
        return row >= 0 && row < rows && column >= 0 && column < columns
    }

    func inspect() {
        for i in 0..<rows {
            for j in 0..<columns {
                print(grid[i * columns + j], terminator: " ")
            }
            print()
        }
    }

    subscript(row: Int, column: Int) -> Double {
        get {
            assert(indexIsValid(row: row, column: column), "Index out of range")
            return grid[(row * columns) + column]
        }
        set {
            assert(indexIsValid(row: row, column: column), "Index out of range")
            grid[(row * columns) + column] = newValue
        }
    }
}

var twoByTwo = Matrix(rows: 2, columns: 2)
twoByTwo.inspect()
twoByTwo[0, 1] = 2.5
twoByTwo.inspect()

初めて知ったこと

subscriptの引数の数は自由.まあ昨日の時点でなんとなくわかっていた.