Junior
Dart-ში რა განსხვავებაა სიტყვებს Abstract და late შორის?
sobes.tech AI
პასუხი AI-სგან
Abstract пайдаланылады абстракттык класстарды түзүү үчүн, алар түздөн-түз инстанцталбайт. Абстракттык классда ишке ашырылган жана абстракттык (ишке ашырылбаган) методдор болушу мүмкүн. Абстракттык методдорду подклассларда ишке ашыруу керек:
late колдонулат кечиктирилген инициализация үчүн. late деп белгиленген өзгөрмө биринчи колдонулгандан мурун ишке киргизилет. Эгер late деп белгиленген жана биринчи колдонууга чейин инициализацияланбаса, иштөө учурунда ката болот. Бул өзгөрмөлөрдүн башка өзгөрмөлөргө же логикага көз каранды болгон учурда пайдалуу:
| Өзгөрмө | Abstract | late |
|---|---|---|
| Колдонуу | Класстар | Өзгөрмөлөр |
| Максат | Контракт, шаблон | Кечиктирилген инициализация |
| Инстанцалуу | Түздөн-түз мүмкүн эмес | Мүмкүн |
| Мажбурлоо | Методдорду ишке ашыруу подклассларда | Инициализация биринчи колдонууда |
Мисал abstract:
// Абстракттуу классты аныктоо
abstract class Shape {
// Абстракттуу метод
double getArea();
// Ишке ашырылган метод
void printName() {
print("Бул фигура");
}
}
// Абстракттуу классты ишке ашыруу
class Circle extends Shape {
double radius;
Circle(this.radius);
@override
double getArea() {
return 3.14 * radius * radius;
}
}
// Shape түзө албайсыз:
// var shape = Shape(); // Ката
Мисал late:
// Кечиктирилген инициализация менен өзгөрмө аныктоо
late String name;
void setupName() {
// Өзгөрмөнүн инициализациясы биринчи колдонулгандан мурун
name = "Flutter Developer";
}
void greet() {
// Биринчи колдонуу
print("Hello, $name!");
}
void main() {
setupName();
greet(); // Чыгаруу "Hello, Flutter Developer!"
// Эгер greet() алдын ала чакырылса, ката болот
// greet(); // Ката, эгер name инициализацияланбаса
}