aiscript icon indicating copy to clipboard operation
aiscript copied to clipboard

Operators for `null` (`null`関連の演算子)

Open MineCake147E opened this issue 2 years ago • 4 comments

Summary

現状v.tags == null || v.tags.reduce(...)のように書いているコードを、v.tags?.reduce(...) ?? falseみたいに書けるようになったらいいなと思いました。

Proposed Syntax

Null-conditional operators (null条件メンバーアクセス演算子)

object?.property    // if (object == null) {null} else {object.property}
object?.function()  // if (object == null) {null} else {object.function()}
array?[0]           // if (array == null) {null} else {array[0]}

Null-coalescing operators (null結合演算子)

x ?? y          // if (x == null) {y} else {x}
x ?? y ?? z     // x ?? (y ?? z)
x ??= y         // if (x == null) {x = y}
x ??= y ??= z   // x ??= (y ??= z)

MineCake147E avatar Oct 17 '23 01:10 MineCake147E

実はその構文をエラー型に対して使いたいという話がありまして…( #403 ) nullも対象にするか、それぞれ別の構文を用意するといいですかね?

FineArchs avatar Oct 17 '23 09:10 FineArchs

エラーの方は!!!.を採用するのはどうでしょうか。

MineCake147E avatar Oct 17 '23 10:10 MineCake147E

エラーの方は!!!.を採用するのはどうでしょうか。

!.がnon-null assertionと被るのがやや懸念点だけど悪くないかも…?

FineArchs avatar Oct 17 '23 10:10 FineArchs

トークナイズ時点で!を2つ繋げた!!との見分けがつきにくい?と思いましたが、そもそもAiScriptでは暗黙の変換を行わないので二重否定の!!を残す必要がありませんでしたね

FineArchs avatar Oct 17 '23 10:10 FineArchs