2015-12-08 8 views
8

スウィフト言語でbottom typeがあるのでしょうか。スウィフトのボトムタイプ

unit typeは、Voidまたは()のように、私たちが持っているのと同じ種類のボトムタイプとは種類が異なります。また、Anyはトップタイプです。私が最も近いことが判明したもの

は、驚くべきことに、我々はほとんどが最もに、任意のタイプ与えを準拠するように、この関数を渡すことができるでfatalError()の形で@noreturn属性です。

しかし、もちろん、これは不完全であり、したがって、例えば、真ボトムタイプの悪い代替、ScalaでNothing、ハスケルにundefinedまたはJavaでさえnull

したがって、はSwift言語のボトムタイプですか?

+3

私はカント私があなたが求めているものは何か見てきたとします。どのような場合に、このボトムタイプを使用したいですか? – Arbitur

+1

@Arbitur言語の観点から言えば、これは型システムの完全性を暗示しています。実際の問題として、すべての型を拡張する型を表現できます。これは型推論で特定の振る舞いを扱うときに便利です。 [this](http://programmers.stackexchange.com/questions/277197/is-there-a-reason-to-have-a-bottom-type-in​​-a-programming-language)を参照することができます。 –

答えて

2

すぐにボトムタイプはありませんが、this talkで説明されているように、@noreturnアトリビュートとジェネリックスを使用して、一般的な動作を少しでもハックすることができます。

func undefined<A>(_ message: String = "") -> A { 
    fatalError("Not Implemented: \(message)") 
} 

その後、我々は、コンパイルエラーを渡すために我々のコードのまだ実装部品をマークするためにそれを使用することができます:

func someComplexFunction<U: User>(u: U) -> U { 
    return undefined("Do this after creating user") 
} 

それとも我々のコードにいくつかの不変性を証明する:

let array = ["hello", "world"] 
let hello: String = array.first ?? undefined("This is impossible!")