2021/2/15 Learn (null-safety) with Snippets! 8〜14の訳

<< 2021/2/15 Learn (null-safety) with Snippets! 1〜7の訳(前ページ


Snippets 8: The assertion operator

nullableな式をnon-nullableな変数に代入したい場合、代入演算子を使うことができます。(` ! `付きで。)

式の後ろに` ! `を付けることで、Dartに対してその式の値がnullでないことを示すことができます。

これはnon-nullableな変数へ安全に代入する方法です。

Note:nullでないことが確実な時に上記の方法を使ってください。値がnullである式に` ! `を付けると例外がthrow(スロー)されます。

` ! `を追加して、下記のコードの3つの間違った割り当て(代入)を修正してみてください。

↑のように書いているが、実際動かしてみると、最初の文はエラーは出ない。(2021年2月15日時点)

ただ、そのような挙動の違いがあっても、基本的な考え方として「nullableな変数はnullチェックが必要」ということは言えるはず。

int? couldReturnNullButDoesnt() => -3;

void main() {
  int? couldBeNullButIsnt = 1;
  List<int?> 

2019/12/5 Swift オプショナル型 パート1

オプショナル型とは

オプショナル型はジェネリック型の列挙型として定義されていて、

「ある型の値」、あるいは「値が存在しない(nil)」

ということを表す型です。

sample1-1

let str1="777"
let num1=Int(str1)
print(num1)
//Optional(777)

SwiftのInt型にはString型の変数の値をInt型に型変換するイニシャライザがあるのですが、全ての文字列が数値に変換できる訳ではありません。

例えば文字列”777″は数値の777に型変換できますが(sample1-1)、文字列”abc”はInt型に型変換できません。

つまりイニシャライザInt()は必ずInt型に変換した値を返せるとは限らない、し失敗することもある、ということです。ですのでsample1-1の結果が示す通り、イニシャライザInt()はOptional<Int> 型の値を返します。

Optional<Int>型は簡易的な記法としてInt?と記述することもでき、通常こちらの書き方が用いられます。

Optional<Int>=Int?

Int?(Optional<Int>)型は整数の値を保持している、あるいは値がない、ということを表します。

sample1-1では文字列”777″はInt型への型変換が成功しますので、定数num1には列挙型Optional<Int>.some(777)がセットされます。sample1-1の結果にあるようにOptional<Int>.some(777)にも簡易的な記法が用意されており、Optional(777)と記述できます。


nil

sample2-1

var num4:Int?=nil
print(num4)
//nil

Optional型の変数にnilを代入することで、値が存在しないことを表すことができます。


sample2-2

var str1="777"

str1=nil

//error: 'nil' cannot be assigned to type 'String'

オプショナル型でない変数にnilを代入することはできません。なので値がない状態が考えられる変数・定数は必ずオプショナル型として宣言する必要があります。


sample2-3…