🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

Q&A

解決済

1回答

510閲覧

Dart : null-aware演算子のメソッドチェーンの中のreceiverとは何なのか。

moriman

総合スコア615

Flutter

Flutterは、iOSとAndroidのアプリを同じコードで開発するためのフレームワークです。オープンソースで開発言語はDart。双方のプラットフォームにおける高度な実行パフォーマンスと開発効率を提供することを目的としています。

Null

Nullとは、プログラミング言語やデータベースにおけるデータ表現の一種です。コンテキストによって"空"もしくは"長さ0の文字列"、”未知・不明”を意味します。

Dart

Dartは、Googleによって開発されたJavaScriptの代替となることを目的に作られた、ウェブ向けのプログラミング言語である。

0グッド

0クリップ

投稿2021/02/17 03:00

https://dart.dev/null-safety/understanding-null-safety#smarter-null-aware-methods
Dartのnull-aware演算子のメソッドチェーンについての説明なのですが、
その中の上記のセクションで何度かreceiverという単語が出てくるのですが、
receiverとはどういう定義なのでしょうか?

// Using null safety: String? notAString = null; print(notAString?.length.isEven);

Even though this program uses ?., it still throws an exception at runtime.

The problem is that the receiver of the .isEven expression is the result of the entire notAString?.length expression to its left.
That expression evaluates to null, so we get a null reference error trying to call .isEven.

上記のプログラムは?.を使っているが、実行時エラーが発生する。
.isEvenのレシーバー(receiver)は、(.isEvenの左側の)notAString?.length全体の結果であるが、それが問題だ。その式(notAString?.length)はnullと評価されるので、.isEvenを呼び出そうとするとnull reference errorが発生する。


パッと思いつくのは、変数への代入が「変数が値を受け取る」ということで、
上記のコードでいうとnullを受け取るnotAStringがレシーバーなのかな、ということ
です。
その理解で意味が通る箇所もあるのですが、例えば上記の説明はそれでは意味がよくわかりません。

receiverとは何なのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

receiverとは何なのでしょうか。

メソッドの操作対象となるものです。

notAString?.length.isEven」であれば、.isEvenのレシーバーはnotAString?.lengthです。

投稿2021/02/17 03:03

maisumakun

総合スコア145975

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moriman

2021/02/17 03:13

回答ありがとうございます。 多分その定義なんだと思うので、定義自体はそれで解決だと思います。 追加質問で恐縮なのですが、 単語の意味としては receive:受ける、受け取る、受け入れる、受け止める receiver:受けるもの、受け取るもの、、、 ということだと思うのですが、 「.isEvenのレシーバーがnotAString?.length」 というのは、.isEvenが送り手、notAString?.lengthが受け手、 ということになるかと思うのですが、 何の送り手、何の受け手なのでしょうか? それがよくわからなくて、イメージしにくい状態なので質問させて頂きました。
maisumakun

2021/02/17 03:20

> 何の送り手、何の受け手なのでしょうか? メソッドを「オブジェクトに送るメッセージ」と捉える立場があります。
moriman

2021/02/17 03:41

なるほど、そういう発想なんですね。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問