Câu trả lời ngắn gọn: không có lý do gì để sử dụng ?
trong trường hợp của bạn.
Long trả lời: ?
có một ý nghĩa khác nhau - nó implies nullability, nghĩa là nó kết thúc tốt đẹp các loại cơ bản (Int
, Float
, Bool
) vào Null<T>
để chắc chắn rằng họ là nullable thậm chí vào các mục tiêu tĩnh (vào các mục tiêu năng động như JavaScript và Neko, đây là vô giá trị một trong hai cách). Nếu bạn có một đối số kiểu Int
, hai sau là tương đương:
function f(i:Null<Int> = null)
function f(?i:Int)
Bây giờ, nếu bạn bổ sung thêm một default value để loại tùy chọn của bạn, giá trị đó sẽ được sử dụng ngay cả khi bạn vượt qua null
:
class Test {
static function main() {
f(); // 12
f(null); // 12
}
static function f(?i:Int = 12) {
trace(i);
}
}