iPhone Xの購入
本稿を読者のみなさんがお読みになるのは年末年始ですが、


iPhone Xと言えばホームボタンがなくなったことと、
できることを列挙するのであれば、
しかし、

まだiOSデバイスはおろかMacにIntel入っていないころからApple製品と付き合ってきた筆者からすると、

HyperCardの何が画期的だったかと言うと、
そのころよりコンピュータができることは飛躍的に増えました。市場も幾何級数的に大きくなりました。しかしそのことがかえってプログラミングというものの敷居を上げたのだとしたらなんと寂しいことでしょう。
筆者がSwiftを
Swift 4.1
前置きはこれくらいにして、
正式リリースは来年前半とのことですが、
[SE-0157]:再帰的なプロトコル制約
Swift 4.associatedtype
の制約に、
protocol Sequence {
associatedtype Element
associatedtype SubSequence: Sequence
where SubSequence.Element == Element,
SubSequence.SubSequence == SubSequence
// ...
}
protocol Collection: Sequence
where Self.SubSequence: Collection {
// ...
}
筆者から見てSwiftの一番の欠点は、
enum List<T> { // Swift 2 or better
case Nil
indirect case Cons(T, List<T>)
}
のように、
ご覧のとおり実例としてSwiftで欠かすことのできないSequence
とSubSequenc
eが挙げられており
[SE-0186]:プロトコル中におけるweakおよびunowned指定の禁止
メモリ管理をどうするかは実体型の問題であってプロトコルの問題ではなかったはずですが、
class A {}
protocol P {
weak var weakVar: A? { get set }
unowned var unownedVar: A { get set }
}
Swift 4.
[SE-0185]:==および.hashValueの自動生成
リスト3で、Equatable
の場合には==
演算子が、Hashable
の場合には加えて.hashValue
が自動で定義されるようになります
struct Point<T:Hashable>: Hashable {
let x: T
let y: T
init(_ x: T, _ y: T) {
self.x = x
self.y = y
}
}
Point(3, 0) == Point(0, 3) // false Point(3, 0) == Point(3, 0) // true Point(3, 0).hashValue // -2942920663782199421
Protocol Extensionの導入により自動生成される演算子やメソッドやプロパティは格段に増えたのですが、==
はストアドプロパティがすべて==
のときだけtrue
で、hashValue
はストアドプロパティの.hashValue
を合成すれば生成できるというのはいわば自明だからです。
もちろんこれまでどおり手動で定義されたものはそちらが優先されるので、==
と.hashValue
は削除してしまうのも一考かもしれません。==
はとにかく.hashValue
で適切なハッシュ関数を定義するのは案外難易度高いので。
次回予告
前半で昨今のプログラミング環境の敷居の高さをぼやきつつ、
本誌最新号をチェック!
Software Design 2022年9月号
2022年8月18日発売
B5判/
定価1,342円
- 第1特集
MySQL アプリ開発者の必修5科目
不意なトラブルに困らないためのRDB基礎知識 - 第2特集
「知りたい」 「使いたい」 「発信したい」 をかなえる
OSSソースコードリーディングのススメ - 特別企画
企業のシステムを支えるOSとエコシステムの全貌
[特別企画] Red Hat Enterprise Linux 9最新ガイド - 短期連載
今さら聞けないSSH
[前編] リモートログインとコマンドの実行 - 短期連載
MySQLで学ぶ文字コード
[最終回] 文字コードのハマりどころTips集 - 短期連載
新生「Ansible」 徹底解説
[4] Playbookの実行環境 (基礎編)