在定義模型時的顫動中。約定是將屬性定義為 final 并撰寫一個copyWithfor 類,而不是定義非 final 變數并洗掉該copyWith方法。確切的原因是什么?這是一個顫振性能的東西嗎?
例如:
class Emplyee {
final String name;
final String id;
Emplyee({required this.name, required this.id});
Emplyee copyWith({String? name, String? id}) {
return Emplyee(id: id ?? this.id, name: name ?? this.name);
}
Map<String, dynamic> toJson() => {
"name": name,
"id": id,
};
Emplyee.fromJson(Map<String, dynamic> json)
: name = json["name"],
id = json["id"];
}
PS 我知道這個約定在小部件中很有意義。但我的問題是關于資料模型類。
uj5u.com熱心網友回復:
這是為了不變性。可變類容易出錯。
uj5u.com熱心網友回復:
所以基本上 copyWith 方法使您可以創建類的新實體,然后您可以在該類的新實體中編輯任何您想要的內容,而不會影響原始類中的資料。所以這就是 copyWith 方法所做的,我認為它不是為了性能,我認為它只是幫助一些編碼用例。
uj5u.com熱心網友回復:
不變性降低了副作用帶來的錯誤風險。看看這個代碼:
class User {
String name;
User({required this.name});
}
void main() {
final user = User(name: 'Stefan');
someFunction(user);
print(user.name);
}
someFunction(User user){
user.name = 'Thomas';
}
此代碼段列印“Thomas”,因為該函式操作用戶物件。在main函式中,您沒有機會知道物件發生了什么。
有了不變性,這是不可能的。有必要創建User一個User名為“Thomas”的新實體。main函式中的實體將是相同的。
uj5u.com熱心網友回復:
使用final使類不可變。
您可以檢查為什么我們需要不可變類?
不可變類有利于快取目的,它是執行緒安全的。
using 背后的原因copyWith()是靈活的,允許在一次呼叫中更新任意數量的屬性。
更多關于dart-and-flutter 中的不可變資料模式
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/374026.html
