đ Home | đ» github | đ Profile |
Dart ááᯠLars Bak ááŸáá·áș Kasper Lund á០ááźáááŻááșážááŻááșááŹážááŹááŒá áșááŒáźáž Google á áááșááźážááŹážááČá· ááááŻááááșááŹááŹá ááŹážáá áșááŻááŒá áșáá«áááșá Dart ááᯠáĄááŻá¶ážááŒáŻááŒáźáž áááșááŸáá·áș áááŻáááŻááșážáĄááșááșáá»áŹážáĄááŒááș ááŹááŹááŸáá·áș áááșá áșáá±áŹá·áĄááșááșááźáá±ážááŸááșážáá»áŹáž áááŻáááșááźáž áááŻááșáá«áááșá áááșááŸá cross platform ááœá±áĄááœááș áááŻáááŻááșážáĄááșááșááœá± ááᯠflutter áááŻáĄááŻá¶ážááŒáŻááŒáźáž ááŒááșááŒááșáááșáááș áá±ážááŹážáááŻááșááŹááŒá±áŹááșá· áááșááŸá dart á popular ááŒá áșááČá· programing language áá áșááŻááŒá áșááŹáá«ááŒáźá Flutter ááᯠáááŻááșáááŻááșááœáŹážááááááș Dart OOP ááᯠááááŹážááŒáźážá០flutter ááᯠááœáŹážááá á±áá»ááșáá«áááșá ááŻááșáááșážááœááș áĄááșááŹáá»á°ážááŒáźáááŻáááș flutter ááᯠááá±ážááČ dart oop knowledge áááșáá±áŹááșááŸááááŸááááŻá á áșáá±ážáá«áááșá ááᯠááź dart oop áĄááŒá±áá¶áá±ááŹáááŹážááœá±ááᯠáá»áá±áŹáșááááá±áŹááșááŒááșááŹáá°ááŒáŻáᏠáá±áŹáșááŒááŹážááŹááŒá áșááŒáźáž áááŻáĄááșáá»ááșáá»áŹážááŸááá«á áááșáá±áŹááș ááŒááșá·ááœááșáááŻááșáá«áááșá
Object-oriented programming (OOP) áááș (objects) ááŒááșááŹáááŻáááŻáááș (áĄááŹáááčááŻáá»áŹáž ) á ááá±áŹáááŹážááᯠáĄááŒá±áá¶á ááááŻááááșáá±ážááœáČááŒááșážááŻá¶á á¶áá áșááŻááŒá áșáá«áááșá áĄááŹáááčáᯠ(Object) ááČááŸáŹ attributes or properties ááœá± áĄááŒááș procedures á áá áșááŒááșá· ááŻááș ááœá±ááᯠá áá áșááá» ááœáČá·á ááșážáááșáá±áŹááșááŹážááČá· Methods áááŻáĄááŹááœá± áá«áááșáá«áááșá
sequential á áá áșááᯠááŻááșááœá±ááᯠáá áșááŒá±áŹááșážááŒáźážáá±áŹááș áá áșááŒá±áŹááșáž top to bottom run ááœáŹážááČá· á áá áș áááŻá program áááŒáźážááŹáá±áá± ááááșážááááșážáááŹáááșááŹááŒáźáž áááŻááŒáźážáá°ááșááœá±ážááŹáá«áááșá ááźáááșááᯠProcedures áááșážááŒááșá· áĄá áŹážáááŻážáá±ážááŹážááŒááșážááŒá áșáá«áááșá
Sequential áááŻááŹá ááź ááŻááșáá áșááŻááŒáźážáááș áá±áŹááș ááŻááșáá áșááŻááᯠProgram á áááșážá áźááŒáźáž áĄááŻááșááŻááșááœáŹážááŒááșážááŒá áșáá«áááșá á„áááŹ
void main() {
int a = 1;
int b = 1;
int result = a + b;
print(result);
}
áĄáá±á«áșááŸáŹ ááŒá±áŹááČá·ááááŻááČ Procedures ááŻááșááŻá á¶áááŻáᏠFunctions ááœá± Methods ááœá± ááČá· ááŻááșááœá±ááᯠá áá áșááá» ááœáČá·á ááșážááŒáźážáá±ážááŹážáááșážááŒá áșáá«áááșá á„áááŹ
void main() {
// á. ááźááŻááșááᯠáᏠrun áá«áááș
int sum = addNumbers(5, 3);
//á. addNumbers áááŻááČá· function áĄá±áŹááșá print áááŻááČá· áááŻááșážááᯠáá»á±áŹáșááŒáźážááœáŹážáá±á«áșáá«áááșá
//á. ááááșááᯠáá±áŹááșááŻá¶ážááźááŸáŹ ááœáŹážááŻááșááŒáááŻá·ááŒá±áŹáá«áááșá
print("The sum is: $sum");
}
// Procedure to add two numbers
//á. ááááŻáááșá ááźáááŻááșážááᯠáááŻáá±áŹááșááŹáá«áááș
int addNumbers(int a, int b) {
return a + b;
}
OOP ááŸáŹ Class áááŻááŹá blueprint ááᯠáĄááŹáá»ááŻážááᯠáááŻáááŻááŹáá«á class áá áșááŻá object áá áșááŻááŸáŹ ááŸááááșá· properties ááŸáá·áș method ááᯠáááșááŸááșáá±ážáá«áááșá á„ááᏠCar ááᯠááČá· Class áá áșáᯠááááșážáĄáŹážááŒááșá· áá°á·ááČá· Blueprint ááᯠáá»áá±áŹáșáááŻá· áááșáá±áŹááșááŹážáááșáááŻáááș áĄáČá· Car Class (Blueprint ) áááŻááŻá¶ážááŒáźáž áá±áŹááșáááș Toyota | Honda| Ford ááŹáž Object ááœá±áááșáá±áŹááșáááŻááșáá«áááșá á„ááŹ
//ááŹáž áááŻááČá· Class áá
áșááŻááᯠáááŻáááŻáááș class áááŻááČá· keyword áááŻááŻá¶ážááŒáźážáááșááźážááá«áááșá
class Car {
//properties ááœá±áááșááŸááșáá±ážááŹážááŒááșážááŒá
áșáá«áááșá
String ?make;
String? model;
int ?year;
double ?price;
// ááŹáž details ááœá±áááŻááŒáááŻá· display Method áá
áșááŻáááșáá±áŹááșááŹážáá«áááș
void displayDetails() {
print('Make: $make, Model: $model, Year: $year, Price: \$${price}');
}
}
áĄáááșáá« ááŻááșááá°ááŹááŸáŹáááŻáááș ááŹáž áááŻááČá· Class ááČááŸáŹ áá°á·ááᯠáá°ááŻá¶ážááŒáźáž ááŒáŻááŻááșáááșá· Object ááœá±ááŸáŹ áá«áááșá·ááČá· Properties (make, model, year , price) ááœá±ááᯠáááșá·ááŹážááŹááœá±á·ááá«áááșá
String make;
String model;
int year;
double price;
áá±áŹááșááŒáźáž displayDetails() Method áá áșáᯠáá«áááșáá«áááșá
void displayDetails() {
print('Make: $make, Model: $model, Year: $year, Price: \$${price}');
}
áĄáááșáá«áááșááźážááČá· ááČá· Car class áááŻááŻá¶ážááŒáźáž Object áá áșááŻáááșááźážááŒááșá·áá«áááșá
//create car class
class Car {
String ?make;
String? model;
int ?year;
double ?price;
// Method to display car details
void displayDetails() {
print('Make: $make, Model: $model, Year: $year, Price: \$${price}');
}
}
void main() {
// car instance objects áá
áșááŻááᯠáááșááźážáá«áááșá
Car car1 = Car();
car1.make = "Toyota";
car1.model = "Camry";
car1.year = 2022;
car1.price = 250000.020;
// car details ááᯠááŻááșááŒááșá·áááŻá· Car Class ááČá displayDetails method ááᯠáááŻááᯠááŸááșážáá°ááŒááșá·áááŻááșáá«áááșá
car1.displayDetails();
}
ááź Car class ááČá properties ááœá±ááČá· method áá áșááᯠáĄááŻá¶ážááŒáŻáááŻá· car1 áááŻááŒáźáž Object áá áșááŻáááșáá±áŹááșáááŻááșáá«áááșá áĄáááșáá« ááŻááșááá°ááŹááŸáŹáááŻáá»áŸááș Toyota ááŹážááᯠáááșááźážááœáŹážááŒááșážááŒá áșáá«áááșá 2022 Camry ááŹážáá±áŹáșáááș ááᯠá á»á±ážáá°ááșážá 250000.020 áááŻááČá· ááŹážáá áșá áźážááá«ááŒáźá
áĄááŹážáá° ááź Car Blueprint (Class) ááᯠááŻá¶ážááŒááž áá±áŹááșáááșááŹáž áĄááœááșááá°áá áșá áźáž áááșáá±áŹááșááŒááșá·áááșá
//create car class
class Car {
String ?make;
String? model;
int ?year;
double ?price;
// Method to display car details
void displayDetails() {
print('Make: $make, Model: $model, Year: $year, Price: \$${price}');
}
}
void main() {
// Creating car objects
Car car1 = Car();
car1.make = "Toyota";
car1.model = "Camry";
car1.year = 2022;
car1.price = 250000.020;
// Displaying car details
car1.displayDetails();
// Creating another car objects
Car car2 = Car();
car2.make = "Honda";
car2.model = "Civic";
car2.year = 2023;
car2.price = 22000.0;
// Displaying car details
car2.displayDetails();
}
áá±áŹááș Honda áááŻááČá· ááŹážáá áșá áźáž ááᯠáĄááœááșááá° áááșáá±áŹááșááŒáźážáá«ááŒáźá ááźááŸáŹ ááŒááșááŒááșá·áááș áááșáá« áááșáá« áá±ážáá±ááááșá· properties ááœá±ááČá· methods ááᯠáá»áŸá±áŹá·áá»ááœáŹážááŹááœá±á·ááá«áááșá áá«á OOP ááČá· áá±ážááŻá¶ážááČá áá áșá áááșáá áșáááŻááșáž ááŒá áșáá«áááșá
constructor áááŻááŹá object áá áșááŻááᯠá áááșáááŻá· áĄááŻá¶ážááŒáŻááá·áș áĄáá°ážáááșážáááșážáá áșááŻááŒá áșáá«áááșá
áá»áá±áŹáșáááŻá· áĄáááșááŸáŹ ááŒááČá· ááŻááșááŸáŹ Car Object áĄááŹáááčááŻáá áșááŻááᯠáááșááźážááČá·áĄáá« Car Object ááŸáŹ áá«ááááșá· make, model , year , price áááŻááČá· properties (ááŻááșáááčáááá»áŹážáĄááœááș) áááŠážáááșáááŻážáá»áŹážááᯠCar class ááČááŸáŹ áááșááŸááșáá±ážáááŻá· constructor Calss ááČááŸáŹ áááșáá±áŹááșááŒáźáž áĄááŻá¶ážááŒáŻáááŻááșáá«áááșá á„áááŹ
class Car {
String ?make;
String? model;
int ?year;
double ?price;
//Constructor
Car(this.make, this.model, this.year, this.price );
// Method to display car details
void displayDetails() {
print('Make: $make, Model: $model, Year: $year, Price: \$${price}');
}
}
void main() {
// Creating car objects
Car car1 = Car('Toyota', 'Camry', 2022, 250000.020);
car1.displayDetails();
}
áĄáááșááŸáŹ ááŒááČá·ááČá· code ááČá· ááᯠááŻááș ááŹááœáŹážááœáŹážáááČ áááŻáááș ááᯠcode ááŸáŹ make, model, year, price áááŻááČá· object value ááœá±ááᯠobject áááșáá±áŹááșááŒáźáž áá±áŹááș define ááŻááșáá±á ááŹááááŻááČ Object áááșáá±áŹááșáááșáž Arguments ááœá±áĄáááŒááșá· áááșá·ááœááșážáá±ážáááŻááșááŒááșážááŒá áșáá«áááșá
ááŸááșááŹážáááș
- Constructor ááŹáááșáá±ážááČá·áĄáá« Class name ááŹáááșááČá· áá°áá°áá±ážááŸááá«áááșá
- Constructor ááœá±ááŸáŹ return type áááŸááá«á
##
Default Constructor áááŻáᏠDart compiler á áĄáááŻáĄáá»áŸá±áŹááșáááșáá±áŹááșááŹážáá±ážááŹážááČá· Constructor ááᯠá±áá«áșááŹáá«á Default Constructor ááŸáŹ parameters ááœá±ááá«áááșááČ Class ááŹáááș áĄáááŻááșáž ááŒá±áŹááŒáŹááŹážááŒááșážááŒá áșáá«áááșá á„áááŹ
class Phone {
String? name;
int? brand;
// Default Constructor
Phone() {
print("This is a default constructor");
}
}
void main() {
// ááŻááșážáááŻááČá· Class áááŻááŻá¶ážááŒáźáž samsung áááŻááČá· phone object áá
áșááŻáááșááźážáááŻááșááŒááșážááŒá
áșáá«áááșá
Phone samsung = Phone();
}
Parameterized constructor áááŻááŹá class áá áșááŻáááșáá±áŹááșááČá·áĄáá« áĄáČá· Class instance variable áá»áŹážááᯠá áááșáááșááŸááșáááŻá·áĄááœááș áĄááŻá¶ážááŒáŻááŹááŒá áșáá«áááșáááááșáž áĄáŹážááŒááșá· Parameterized constructor áááŻáᏠobject instance ááá±áááșá·áá±ážáááŻááșááČá· parameter áá»áŹážá áááșáááŻáž áááŻáá°ááŒáźáž Class áááŻááŹáá±á«áșááŹááČá· áĄáááŻáá»á±áŹááș properties ááœá±áááŻážááœá±ááᯠáááșááŸááșáá±ážáááŻááșááŹááᯠParameterized Constructor áááŻá·áá±á«áșáá«áááșá áĄáááșááŸáŹ Car Object áá áșáᯠáááșááźážááŒáźáž áááșá·áá±ážáááŻááș ááČá· Arguments (make,model,year,price) ááœá±ááČá· áááșáááŻážááᯠáĄáááŻáá»áŸá±áŹááșáááșááŸááșáááŻá·áá«á á„ááᏠááź ááŻááșááᯠááŒááșááŒááșá·áá«á
class Car {
String ?make;
String? model;
int ?year;
double ?price;
//Parameterized Constructor áá
áșááŻáááșááźážáááŻááșáá«áááșá
Car(this.make, this.model, this.year, this.price );
}
void main() {
// car1 object áááșáá±áŹááșáááșáž Car class ááČ ááᯠargument ááœá±áááșá·ááœááșážááŒáźážáá±á«áșáááŻááșáá«áááșá
Car car1 = Car('Toyota', 'Camry', 2022, 250000.020);
}
Java, C++, C#, á áááșá· ááááŻáááșáááșážááŹááŹáááșááœá±ááŸáŹ áĄáááșáá° Constructor ááœá±áááșááźážáááŻážááá«áááșá áááŻá·áá±ááČá· dart ááŸáŹ áááá«áá°ážá áá«áá±ááČá· áĄáČá·áá«ááᯠááŻááșáá±áŹááșáááŻá·áááČá· áááșážáááșážá Name Constructor áááŻááŻá¶ážááŒáźážáá±áŹá· ááŻááșáá±áŹááșáááŻááșááŒááșážááŒá áșáá«áááșá Named Constructor ááᯠáĄááŻá¶ážááŒáŻááŒááșážá code readability ááᯠáááŻážáááșá á±áá«áááșá áá±áŹááșáá áșááŻá ááŹáááșáá° constructor ááœá±áááșááźážááŒááșááČá·áĄáá«ááŸáŹ áĄááŻá¶ážáááșáá«áááșá á„áááŹ
class Car {
String ?make;
String? model;
int ?year;
double ?price;
Car(this.make, this.model, this.year, this.price );
// here Car() is a named constructor
Car.namedConstructor(this.make, this.model, this.year,[this.price = 0]);
void displayCarDetails() {
print("car name: $make.");
print("car model: $model.");
print("car model: $year.");
print("car price: $price");
}
}
void main() {
var car1 = Car("Toyota", "Camry", 2022, 20000.00);
car1.displayCarDetails();
var car2 = Car.namedConstructor("Honda", "Civic", 2023);
car2.displayCarDetails();
}
áááŻáá±áŹáșááŒáá« á„ááᏠáááŻááŒááșá·áááș Car class ááČááŸáŹ properties ááœá±ááČááŸáŹ Car Parameterized Constructor áá áșáᯠáĄááŒááș Car.namedConstructor áááŻááŒáźáž Name Constructor áá±áŹááșáá áșááŻááᯠáááșáá±áŹááșááŒáźáž price ááᯠdefault áĄáá±ááŒááșá· optional ááŻá¶á á¶ááČá·áááșááŸááșááŒáźážáá±ážááŹážáááŻááșáá«áááșá
áááșááœá±á· ááŻááșáááșážááœááșááŻá¶áž ááááŻáááșááœá±ááČá· áá±ážááŹážááŒáźáž á„áááŹááŒááșá·ááŒááșá·áá«áááșá
import 'dart:convert';
class Car {
String ?make;
String? model;
Car(this.make, this.model );
// here Car() is a named constructor
Car.fromJson(Map<String, dynamic>json){
make = json['make'];
model = json['model'];
}
}
void main() {
String carJsonData = '{"make":"Toyota","model":"Carma"}';
Car car1 = Car.fromJson(jsonDecode(carJsonData));
print("Car 1 model: ${car1.make}");
}
áĄáááșáá« ááŻááșááᯠááŒááșá·áááșáááŻáááș carJsonData ááᯠáá»áá±áŹáșáááŻá· api request ááá±ááááșáááŻá·ááá±áŹááŹážááŒááșá·áá«áááșá ááź jsonDecode ááŻááșááŹážááČá· json data ááᯠCar Object ááá± argument áá áșááŻáĄáá±ááŒááșá· áááșá·áá±ážáááŻááșáá«áááșá
Car class ááČááŸáŹ Name Constructor ááŒá áșááČá· Car.fromJson ááŸáŹ parameter áĄáá±ááČá· áááșáá¶ááŒáźážáá±áŹá· porperties ááœá±ááŒá áșááČá· make ááČá· model ááœá±ááČá· áááșáááŻážááœá±ááᯠááŒá±áŹááșážáá±ážáááŻááșáá«áááșá ááźáááŻááŻá¶á á¶áá»ááŻážááŸááșá· Flutter ááŸáŹ api á data ááœá±ááᯠáá»áá±áŹáșáááŻá· fetch ááŒááșážááŒá áșáá«áááșá
const keyword ááᯠááŻá¶ážááŒáźáž constant constructor ááœá±ááᯠáá±ážááŹážááá«áááșá const ááᯠááŻá¶ážááŒáźáž áááșááźážááŹážááČá· object ááœá±ááČá· áááșáááŻážáᏠáááșááŸááșááŒáźážááČá·áĄáá« áááșáá»áááșážáááŻá·áááá«áá°ážá
const constructor áááŻááŻá¶ážááŒáŻááŒááșážá ááááŻáááșááČá· á áœááșážáá±áŹááșáááș ááᯠáááŻááŒáźáž áá±áŹááșážááœááșá á±áá«áááșá
class áĄááœááșážááŸáŹ ááŸáááČá· properites ááœá±ááᯠfinal áááŻááČá· keyword áááŻááŻá¶ážááŒáźážááŒá±áŹááŒáŹáááș
Constant Constructor ááŸáŹ body áááŸááá«
á„áááŹ
class Point {
final int x;
final int y;
const Point(this.x, this.y);
}
void main() {
// p1 and p2 has the same hash code.
Point p1 = const Point(1, 2);
print("The p1 hash code is: ${p1.hashCode}");
Point p2 = const Point(1, 2);
print("The p2 hash code is: ${p2.hashCode}");
// without using const
// this has different hash code.
Point p3 = Point(2, 2);
print("The p3 hash code is: ${p3.hashCode}");
Point p4 = Point(2, 2);
print("The p4 hash code is: ${p4.hashCode}");
}
ááŸááșááŹážáááș
áĄáááșáá« code ááᯠrun ááŒááșá·áá«á Output ááŸáŹ p1 ááŸááșá· p2 ááČá· code áááșáááŻážá áá°ááźáá±ááŹááᯠááœá±á·áááŸáŹáá«á áááŻá·áá±ááČá· const ááČá· ááááșááźážááŹážááČá· p3 ááČá· p4 áááŻá·ááČá· Object ááœá±ááČá· áááșáááŻážááœá±ááá±áŹá· áá°ááźáá±ááŸáŹáááŻááșáá«áá°ážá ááŹááŒá±áŹááșá·ááČáááŻáááș hash code ááœá±ááČá· constant object ááœá±á ááááŻáááșá compile ááŻááșááČá·áĄáá»áááșááŸáŹ generate ááŻááșááŹááŒá±áŹááșá·ááŒá áșáá«áááșá non-constant áááŻááșááČá· p3 ááČá· p4 object ááœá±ááá±áŹá· ááááŻáááș run time ááŸáŹ generate ááŹááŒá±áŹááșá· áááșáááŻážááá°ááźááŒááșážááŒá áșáá«áááșá
Compile Time: áááŻááŹá áá»áá±áŹáșáááŻá· áá±ážááŹážááČá· code ááœá±ááᯠcomputer áááŹážáááșáĄá±áŹááș translate ááŻááșááČá·áĄáá»áááșááᯠááŒá±áŹááŹáá«á áĄáČá·ááźáá»áááșááŸáŹ ááŒá áșáá±á«áșááČá· errors ááœá±ááᯠcompile-time errors, á„ááᏠtypos áááŻá·áááŻááș syntax áĄááŸáŹážááœá±áá±ážááŹážááááŒááșážá
Run Time: áááŻááŹá áá»áá±áŹáșáááŻá· áá±ážááŹážááČá· ááŻááș ááœá±ááᯠá áááșááŒáźáž execute ááŻááșááČá·áĄáá»áááșááᯠááŒá±áŹáááŻááŒááșážááŒá áșáá«áááșá áĄáČá·ááźáá»áááșááŸáŹ ááœá±á·ááČá· error ááœá±áááŻáá±áŹá· run-time errors, á„ááᏠááŻáááŒáá·áș á áŹážáááș ááŻááșáá±áŹááșááááŹáááŻá· áááŻá·áááŻááș áááŸáááČá· áá±ááŹááᯠaccessing ááŻááșááŹáááŻá·á
#
áĄáááŻážááŸááșážááŻá¶ážáááșážáááșážááČá· ááŒá±áŹááááș Encapsulation áááŻáᏠlibrary(áááŻááŹáá»áá±áŹáșáááșááŸááșážááŒáá«áááș) áĄááœááșážá áá±ááŹááᯠááŒááșá áá±ááŹááá± ááŸááșážáá°áá±á«áșááŻá¶ážááœááșá·áááŸááĄá±áŹááș ááŻá¶ážááœááșááŹážááŒááșážááᯠáááŻáááŻááŹáá«á áĄáČá·áááŻáááșážá áá áșáááŻáĄááŻá¶ážááŒáŻááŒáźážáá±ážááŹážááŒááșážá áááááá±ážááČá· ááááŻáááșááᯠáĄáááșážáá°ááșááœá±ážááŸáŻáááŒá áșá á±ááČáááŻážááŸááșážááŒáźáž ááŻááșá áźáá¶ááááșážáá»áŻááșá ááœááșáá°á á±áá»ááșážááŒá áșáá«áááșá
ááŻá¶ááŸááșáĄáŹážááŒááșá· .dart ááČá· file ááᯠlibrary áááŻááŻá¶ážáá°ááșážáááŻááșááŒááșážááŒá áșáá«áááșá library áááŻááŹá functions ááœá± ááŸááșá· classess ááœá± áá«áááșááœáČá·á ááșážááŹážááČá· .dart file áá áșáááŻááșááᯠáááșááœááșáá«áááșá import keyword ááᯠáĄááŻá¶ážááŒáŻááŒáźáž library áá áșááŻááČá· áá áșáᯠáá»áááșáááșáĄááŻááșááŻááșáááŻááșáá«áááșá áĄáČá·ááᯠáá»áááșáááșáĄááŻááșááŻááșáááșáž library áá áșááŻá áĄááœááșážá០áá±áŹááș library áá áșááŻá ááŹáá±á«áșáá°ááŻá¶ážá áœáČááœááșá·áááŸááĄá±áŹááș data ááœá±ááᯠááŻá¶ážááœááșááŹáž ááŒááșážááᯠencapsulation áááŻáá±á«áșááŒááșážááŒá áșáá«áááșá
ááŸááșááŹážáááș
Dart ááŸáŹ php áááŻáá»áá±áŹáșáááŻá·áá±áž áá±áá» Access Modifiers ááŒá áșááČá· public, private ááČá· protected áááŻá·áááŻááŹáááŸááá«áá°ážá Dart ááŸáŹ á _ (undersore) áááŻááŻá¶ážááŒáźáž private property áááŻá· method ááœá±ááᯠáá±ážááŹážáááŹáá«á Encapsulation áááŻááŹááČá· class level ááŸáŹ áááŻááșááČ library level ááŸáŹááŒá áșááŹáááŻááŹááááá»ááșá á±áá»ááșáá«áááșá
Hero áááŻááČá· class áá áșááŻááᯠáááșááźážáááŻááșáááșá áĄáČá· class ááŸáŹ privagte properties _id ááČá· _name ááŸá áșáᯠááŸááá«áááșá áá»áá±áŹáșáááŻá· áá±áŹááș áááș public methods setId() ááČá· setName() áááŻááŒáźáž private properties ááᯠááŒáŻááŒááșáááŻá· áááșááŒáźážáááșáá±áŹááșááŒááșá·áá«áááșá ááźáá±ááŹááŸáŹ getter ááœá± setter ááœá±ááŻá¶ážááœáŹážáᏠááᯠáĄá±áŹááșááŸáŹ getter ááœá± setter ááœá±áááșáá¶ááŸááșážáááșážááœáŹážáá«áááșá
class Hero {
// Private properties ááœá±áááșáá±áŹááșááŹážááŹáá«
int? _id;
String? _name;
// Getter method áááŻáááșáá±áŹááșááŒáźáž private property _id ááᯠaccess áá°áááŻá·áá«á
int getId() {
return _id!;
}
// Getter method áááŻáááșáá±áŹááșááŒáźáž private property _name ááᯠaccess áá°áááŻá·áá«á
String getName() {
return _name!;
}
// Setter method áááșáá±áŹááșááŒáźáž private property _id ááááșáááŻáž ááᯠááŒáŻááŒááșáááŻá·áá«á
void setId(int id) {
this._id = id;
}
// Setter method áááșáá±áŹááșááŒáźáž private property _name ááááșáááŻáž ááᯠááŒáŻááŒááșáááŻá·áá«á
void setName(String name) {
this._name = name;
}
}
void main() {
// Hero class á Object áá
áșááŻááᯠáááșááźážáááș
Hero hero = new Hero();
//public setter áááŻááŻá¶ážááŒáźáž private properties ááœá±á áááșáááŻážááᯠááŒá±áŹááșážáááșá
hero.setId(1);
hero.setName("áá»ááșá
á
áșááŹáž");
// getter ááᯠááŻá¶ážááŒáźáž object á áááșáááŻáž ááœá±ááᯠááŒááșááŻááșááŒááșá·áááșá
print("Id: ${hero.getId()}");
print("Name: ${hero.getName()}");
}
áĄáááșááŸáŹááŒááČá· example áááŻááČ private properties ááœá±ááČá· áááșáááŻážááᯠáá±áŹááșááááșážááČá· áááŻááșáááŻááș ááœáŹážááááŒááșá·áá«áááșá
class Hero {
// áĄáááșáá«ááŻááșáá»áŹážááźááŸáŹ áĄáááșáááŻááșážááŸááááșááá±áŹááŹážáá«
....
}
void main() {
// Hero class á Object áá
áșááŻááᯠáááșááźážáááș
Hero hero = new Hero();
//public setter áááŻááŻá¶ážááŒáźáž private properties ááœá±á áááșáááŻážááᯠááŒá±áŹááșážáááșá
hero.setId(1);
hero.setName("áá»ááșá
á
áșááŹáž");
//ááźáá±ááŹááŸáŹ _name ááᯠáááŻááșáááŻááșááœáŹážáá±á«áșááŒáźáž áááșáááŻážáá»áááșážáááŻááșááŹáá«á áĄáČá·áá«áááŻááČ áĄááŻááșááŻááșáá±ááŸáŹ ááŹáááŻá· private áááŻááŒáźáž private áááŒá
áșááŹááČ?
hero._name = "áááŻá¶ážááááș";
// getter ááᯠááŻá¶ážááŒáźáž object á áááșáááŻáž ááœá±ááᯠááŒááșááŻááșááŒááșá·áááșá
print("Id: ${hero.getId()}");
print("Name: ${hero.getName()}");
}
áĄáá±á«áșááŸáŹ ááŒá±áŹááČá·ááááŻááČ áá°á class level áááŻááșáá« library level ááŒá áșáááŻá·áá«á áĄáááșááᯠvoid main() function ááᯠáá±áŹááș .dart file ááČá· library áá áșááŻááźážáááșá·áá±áŹááșááŒáźážáááŻáááŻáá±á«áșááŒááșááČá·áĄáá« error áááșáá«ááááșá·áááșá
main.dart file ááá± hero.dart file áááŻááŒáźáž library ááŸá áșáᯠááœáČá·ááŒáźáž ááźáááșážáĄáááŻááșážáá±ážááŒááșá·ááČá·áĄáá« áááŻááᯠerror ááᯠááœá±á·áááŸáŹááŒá áșáá«áááșá
```The setter â_nameâ isnât defined for the type âHeroâ. Try importing the library that defines â_nameâ, correcting the name to the name of an existing setter, or defining a setter or field named â_nameâ.dartundefined_setter
#### Read-only Properties áááŻááŒáźáž áááșááŸááșáááŻá·ááá«áá±ážáááșá á„áááŹ
```dart
class Hero {
int? _id;
final String _name = "áá»ááșá
á
áșááŹáž";
// áĄáááșáá«ááŻááșáá»áŹážááźááŸáŹ áĄáááșáááŻááșážááŸááááșááá±áŹááŹážáá«
....
}
void main() {
...
// áá«áááŻáááșáá±áŹá· error áááșáá«ááŒáź
hero._name = "áááŻá¶ážááááș";
....
}
final keyword ááᯠááŻá¶ážááŒáźáž properties ááœá±ááČá· áááșáááŻážááᯠread only ááŻá¶á ᶠááČá· dart ááŸáŹ áĄááŻá¶ážááŒáŻáááŻááșáá«áááșá ááźááᯠfinal ááČá· property áááșáááŻážááᯠáááșááŸááșááŒáźážááŒáźáááŻáááș library áĄááœááșážááá± áááșáááŻážááᯠáá»áááșážáááŻááșááœááșá·ááČ áááŸááá±áŹá·áá«áá°ážá
##
Encapsulation áááŹááŒá±áŹááșá· áĄáá±ážááŒáźážáááČ?
##
- Data ááŻá¶ážááœááșááŒááșáž: class ááŒááșááá±ááŹááá± áá±ááŹááœá±ááᯠaccess ááá±ážáá»ááșááČá·áĄáá« Encapsulation áĄááŻá¶ážááŒáŻááŒáźáž data hiding ááŻááșáááŻááșááŒááșážá
- Testability: class áĄááœááșážááŸáŹ ááŸáááČá· properties ááœá± methods ááœá±ááᯠáĄááœááșááá° test ááŻááșáááŻááșááŒááșážá
- Modularity and Code Organization: ááŻááșááœá±ááᯠclass áĄá áŻáĄáá±ážáĄááœááșážááŸáŹ áááșá·ááœááșážááŹážáááŻááșáááșá áĄáČá·áááŻáááșá·ááœááșážááŒáźáž ááŹážáááŻááșááŒááșážááŒá±áŹááșá· ááááŻáááșááᯠáĄááœááșááá°ááŹážáááșá á±áááŻááșááŒáźáž maintain ááŻááșáááœááșááŒááșáž ááŸááșá· update ááŻááșáááœááșááŒááșáž
- Security: áá±ááŹááœá±ááᯠunauthorized modification áááŻá· access ááŻááșááŒááșážááá± ááŹááœááșáááŻááșááŒááșážá
á„áááŹ
class Person {
// Properties
String? firstName;
String? lastName;
// Parameterized constructor ááá± firstName ááČá· lastName áááșáááŻážáá»áŹážáĄáŹáž áááșááŸááșáááŻááșáá«áááșá
Person(this.firstName, this.lastName);
// Getter á ááźáá±ááŹááŸáŹ properties áááșáááŻážááœá±ááᯠrunturn ááŒááșáá±ážáááŻááșáá«áááșá
String get fullName => "$firstName $lastName";
}
void main() {
Person p = Person("John", "Doe");
// ááźáá±ááŹááŸáŹ object p ááᯠáááșááźážááŒáźážáá±áŹááș p.fullName áááŻááČá· get (getter) ááᯠáááșážáá±á«áșááŒáźáž properties ááœá±ááČá·áááșáááŻážááᯠááŻááșááŒááșá·ááœáŹážááŹááᯠááœá±á·áááŸáŹáá«
print(p.fullName);
}
ááŸááșááŹážáááș :
getter ááᯠáá±ážááČá·ááŻá¶á ᶠááŸá áșáá»ááŻážáá±ážáááŻááșáá«áááșá áĄáá±á«áșá á„áááŹá ááź => (fat arrow) áááŻááŻá¶ážááŒáźáž áá±ážááŹážááŹážááŹáá«á
String get fullName => "$firstName $lastName";
áá±áŹááș áá áșáááșážá { } áááŻáááŻáá±ážááŹážáááŻááșáá«áááșá
String get fullName {
return "$firstName $lastName";
}
á„áááŹ
class Person {
int _age;
Person(this._age);
//getter
int get age => _age;
//setter ááᯠset áááŻááŹááČá· áááșááźážáááŻááșáá«áááșá age áááŻááČá· properties ááᯠááŒáŻááŒááșáááŻá·áĄááœááș set age ááČááŸáŹ newAge parameter áá
áșááŻááᯠáááșáá¶ááŹážáá«áááș
set age(int newAge) {
// áááŹááČá· newAge ááČá·áááșáááŻážááᯠif condition ááČá· á
á
áșáá±ážááŹážáá«áááșá
if (newAge >= 0 && newAge <= 120) {
//newAge á 0 ááČááźáááș áá°á·áááșááŒáźážáááș ááŒáźážáá±áŹá· ááá ááČá·ááźááŒáźáž ááá áááșáááșáááșáááŻáááș private property _age áááșáááŻážááᯠááŹááŒá±áŹááșážááœáŹážáá«áááșá
_age = newAge;
print("Age updated successfully!");
} else {
//if condition ááČá· áááźááČá·áĄááŹááœá±ááᯠááźááŸáŹ ááŹááŒáźáž áĄááŻááșááŻááșááœáŹážááŸáŹáá«á
print("Invalid age. Please provide a valid age between 0 and 120.");
}
}
}
void main() {
//person object áá
áșáᯠáááșááČá·áĄáá« argument 25 áááŻááČá· age áááŻáááșá·áá±ážáááŻááșáá«áááșá
var person = Person(25);
//áááșááŸááĄáááș 25 ááᯠááŻááșáá±ážáá«ááááșá·áááș
print("Current age: ${person.age}");
//ááźááŻááșá setter age áááŻáá±á«áșááŒáźáž áááșáááŻáž 30 áááșá·ááŒáźáž _age value ááᯠááŒááșáááŻááșáá«áááșá
person.age = 30;
print("Updated age: ${person.age}");
//ááźááŸáŹ ááČááČ setter age ááᯠáááșáááŻáž áá
á áááșá·ááŒáźáž _age value ááᯠááŒááșáááŻá·ááŒááŻážá
áŹážáá±ááČá· error message ááČááá«ááááșá·áááșá
person.age = 150; // Error message will be printed
print("Age after invalid update: ${person.age}");
}
áĄáááșáá« á„ááᏠáááŻááŒááșá·áááș setter ááœá± dart ááŸáŹ áááșááᯠáĄááŻááșááŻááșááČ ááŹáááșááŒáźáááŻá·áá°á áá«áááșá áĄáááșáááŻá· ááŹážááááșáááș áá±áŹááșáááŒáááș áá»áá±áŹáșááŒááŹážááČá· code ááᯠáá±áá»áŹ ááŒááșáááșááŒáźáž áááŻááșáá±ážááŒáźáž result ááœá±ááŻááșááŒááșá·áá«á
Inhertiance áááŻáᏠáĄááœááșááá°ááŒá±áŹááááș áááááźááá± ááŹážáááźážá áĄááœá±áááșáá¶ááČá·ááá±áŹ áááŻááŒá±áŹáááșáááŻá·áá±ááŹááŹážááŒááșá·áá«á ááááááŻááșááČá·ááŹáž áá°á·ááŹážáááźážááœá±á áá°áá±áŹááșážáááŻá·ááááșá dart ááŸáŹáááŻáááșááČ class ááŸá áșáᯠááŒáŹáž áá°áááŻá·áááŻááșáááŻááșááČá· properties ááœá± methods ááœá±ááᯠshare ááŻá¶ážááŒááșážááᯠinherticance áááŻá·áá±á«áșáá«áááșá extend keyword ááᯠááŻá¶ááŒáźáž Parent class á áá± Inheritance ááᯠááŻááșáá±áŹááșááá«áááșá
ááŸááșááŹážáááș :
Inherticance ááᯠáááșááźážáááŻááșááŹááČá· ááá ááŸááșá· ááŹážáááźáž ááŒáŹážá is-a relation áá áșááŻáááșááźáž áááŻááșáááșáááŻá·ááŒááșááŒááșá·áá«á á„ááᏠStudent is a Person, Car is a Vehicle, Dog is a Animal, School is a building á áááșá·áááŻá·ááŒá áșáá«áááșá
Dart ááŸáŹá single inheritance áááŻááČááŻááșáá±áŹááșáááŻááșáá«áááșá áááŻáááŻááŹá class áá áșááŻá áá±áŹááșáááș class áá áșááŻááźáááČ inheritance ááŻááșáá°áááŻá·áááŸáŹáá«á multiple inheritance ááŻááșáááŻá·áááá«áá°ážá class áá áșááŻá classes áĄáá»áŹážááŒáźážááźááá± inheritance áá°ááœááșá·áááŸááá«á áĄáá±á áá áșáá±áŹááșááČááČááŸáááŹáááŻáž áĄáá±ááŸá áșáá±áŹááșááŻá¶ážáá±áŹááșááźááá± áĄááœá±áááșáá¶áááŻá·áááááŻááșááááŻáá±á«á· :DâŠ
###
// áá°á·áĄááœááșážááŸáŹ ááŸáááČá· properties ááœá± methods ááœá±ááᯠááŹááŒáźáž áá°ááŻá¶ážááŸáŹááŒá
áșááČá·áĄááœááș áá°á·ááᯠBase class áááŻá· super class ááᯠáá±á«áșáá«áááșá
class ParentClass {
// Parent class code
}
//Base class ááá± properties ááœá± methods ááœá±ááᯠáá±á«áșáá°ááŻá¶ážááŸáŹáááŻá· áá°ááᯠderived class áááŻá· sub class áááŻá·áá±á«áșáá«áááșá
class ChildClass extends ParentClass {
// Child class code
}
á„ááᏠCharacter áááŻááČá· class áá áșáᯠáááŻáááșááźážáá«áááșá áá±áŹááș áá»áá±áŹáșáááŻá· hero class áá áșááŻáá±áŹááșááŒáźáž Character ááČá properties ááœá±ááČá· methods ááœá±ááᯠáĄááœá±áááșáá¶ááŒááșá·áá«áááșá
class Character {
// Properties
String? name;
int? age;
// Method
void display() {
print("Name: $name");
print("Age: $age");
}
}
//hero class áá
áșááŻáá±áŹááșááŒáźáž Character ááČá properties ááœá±ááČá· methods ááœá±ááᯠextends ááČá· áĄááœá±áááșáá¶ááŹážáá«áááș
class Hero extends Character {
// Fields
String? wapon;
// Method
void displaySchoolInfo() {
print("$name ááŸáŹ: $wapon ááŸááááș");
}
}
void main() {
// Creating an object of the Hero class
var hero = Hero();
hero.name = "áá»ááșá
á
áșááŹáž";
hero.age = 45;
hero.wapon = "ááŸá¶";
hero.display();
hero.displaySchoolInfo();
}
Inheritance á áá±áŹááșážáá»ááŻážáá»áŹáž
ááŻááșááœá±ááᯠááŒááșááŻá¶ážáááŻááșááŹááŒá±áŹááșá· ááŻááșáĄáá±áĄááœááșááᯠáá»áŸá±áŹá·áá»áááŻááșááŒááșáž
ááŻááșáááŻážááŸááșážááŸáŻá áááșá·ááŸááșážááŸáŻá ááŻááșááááșážááááșážáááŻá· áĄáá»áááș ááŸááșá· ááœá± ááŻááșáá»áááșááŹááŸáŻ
Inheritance áĄáá»ááŻážáĄá áŹážáá»áŹáž
Single Inheritance : base class ááá± sub class á inhertiance ááŻááșááŒááșážáááŻáááŻáááŻáááșá
Multilevel Inheritance á„ááᏠáá áșáᯠááŻááșááŒááșá·áá«áááșá
class Vehical {
String? name;
double? prize;
}
class Tesla extends Vehical {
void display() {
print("Name: ${name}");
print("Prize: ${prize}");
}
}
class Model3 extends Tesla {
String? color;
void display() {
// ááźáá±ááŹááŸáŹ suber áááŻááŻá¶ážááŹážáᏠááááá»ááșá
á±áá»ááșáá«áááșá Base class Vehical ááá± display method ááᯠáá°ááŻá¶ážááœáŹážááŹáá«
super.display();
print("Color: ${color}");
}
}
void main() {
Model3 m = new Model3();
m.name = "Tesla Model 3";
m.prize = 50000.00;
m.color = "Red";
m.display();
}
Hierarchical Inheritance á„ááᏠáá áșáᯠááŻááșááŒááșá·áá«áááșá áĄáááșááŸáŹ ááŒááČá·ááČá· Character áááŻááČ áá±áŹááșáááș Hero áá áșáá±áŹááșáááșáá±áŹááșáááŻááșáá«á
class Character {
// Properties
String? name;
int? age;
// Method
void display() {
print("Name: $name");
print("Age: $age");
}
}
// Here In hero class, we are extending the
// properties and methods of the Character class
class Hero extends Character {
// Fields
String? wapon;
// Method
void displaySchoolInfo() {
print("$name ááŸáŹ: $wapon ááŸááááș");
}
}
class Hero2 extends Character {
// Fields
String? wapon;
// Method
void displaySchoolInfo() {
print("$name ááŸáŹ: $wapon ááŸááááș");
}
}
void main() {
// Creating an object of the Hero class
var hero = Hero();
hero.name = "áá»ááșá
á
áșááŹáž";
hero.age = 45;
hero.wapon = "ááŸá¶";
hero.display();
hero.displaySchoolInfo();
// Creating an object of the Hero class
var hero2 = Hero2();
hero2.name = "áĄáá±áŹáșáááŹ";
hero2.age = 50;
hero2.wapon = "ááŒáŹáž";
hero2.display();
hero2.displaySchoolInfo();
}
ááŸááșááŹážáááș
- ááŻááșááœá±ááᯠááŒááșáááșáĄááŻá¶ážááŒáŻáááșááŒá áșáá«áááșá
- extends keyword ááᯠááŻá¶ážááŒáźáž áááșááźážááá«áááșá
- Super class á Properties ááŸááșá· methods ááᯠsub class áááŒááșáá°ááŻá¶ážááŒááșážááŒá áșáááșá
- Sub class ááČááŸáŹ áááșážá Properties ááŸááșá· methods ááœá± áááșáá±áŹááșáááŻááșáá«áááșá
ááŹáááŻá·ááČáááŻáááș ambiguity (ááŻááș áá°ááșááœá±ážááŸáŻ) ááᯠááŒá áșá á±áááŻáá«á á„ááᏠApple áááŻááČá· sub class á Base class Fruit ááČá· Vegetable ááŸá áșááŻááá± extend ááČá· áĄááœá±áááșáá¶ááŹážááááŻáá«áááŻá·á áĄáČá·ááźá· Base Classes ááŸá áșááŻááŸáŹ eat áááŻááČá· ááŹáááșáá° Method ááŸá áșááŻááŸááá±áááŻááșáá«áááșá áĄáČá·áááŻáááŻáááș eat áááŻááČá· method ááᯠApple á ááœáŹážáá±á«áșááČá·áĄáá« áááș Fruit ááŸááșá· Vegetable Base class á eat method ááŸá áșááŻááČá áááș Method ááᯠáá±á«áșááŸáŹááČáááŻáᏠ?á áĄáČá·ááᯠáá°ááșááœá±ážááŸáŻááŒá±áŹááșá· Dart á Support ááá±ážááŹááŒá áșáá«áááșá
áá»áá±áŹáșáááŻá· áĄáá±á«áșááŸáŹ áá±á·ááŹááČá·ááČá· Constructor ááČá· Inhertiance ááᯠáá±á«ááșážááŒáźáž ááŻá¶ážá áœáČááŒááșážáá«á áá«ááŒá±áŹááșá· Constructor ááČá· Inhertiance ááᯠááŹážáááșá០ááźááá áčá ááᯠáááșáááșáá±á·ááŹáá«á
Constructor Inheritance áááŻááŹááŹááČ ?
Base Class (Parent Class ) ááČá Constructor ááᯠsub class ááá± áĄááœá±áááșáᶠáááŻá· áá±á«áșáá°ááŻá¶ážá áœáČááŹááᯠáááŻáááŻááŹáá«á
á„ááᏠáĄáá«áșááŸáŹ áá±á·ááŹááČá· ááČá· constructor áá±ážáá»ááŻážááČá Parameterize constructor ááČá· Inheritance áá±á«ááșážá ááșáá±ážááŒááșá·áá«áááșá
class Character {
String name;
int health;
Character(this.name, this.health);
void takeDamage(int damage) {
health -= damage;
print('$name took $damage damage. Remaining health: $health');
}
void attack(Character target, int damage) {
print('$name performs an attack on ${target.name}.');
target.takeDamage(damage);
}
void showInfo() {
print('$name - Health: $health');
}
}
class Hero extends Character {
String superpower;
//ááźáá±ááŹááŸáŹ Hero Constructor á : super(name,150) áááŻááŒáźáž Base Class Character ááČá constructor ááᯠInheritance ááŻááșááœáŹážááŒááșážááŒá
áșáá«áááșá
Hero(String name, this.superpower) : super(name, 150);
void useSuperpower() {
print('$name uses superpower: $superpower');
}
@override
void attack(Character target, int damage) {
print('$name performs a heroic attack on ${target.name}.');
target.takeDamage(damage);
}
}
void main() {
var enemy = Character('Evil Enemy', 100);
var hero = Hero('Superhero', 'Flight');
enemy.showInfo();
hero.showInfo();
hero.attack(enemy, 20);
hero.useSuperpower();
enemy.showInfo();
hero.showInfo();
}
áĄáááșááŻá¶áČáž polymorphism á ááŹážááŻá¶ážááᯠáĄáááčáá«ááșááœááșá·ááŒááșá·áá«áááșá Poly áááŻáᏠMany (áĄáá»áŹážáĄááŒáŹáž) morphism áááŻáᏠ(ááŻá¶á á¶) ááŻá¶á á¶áĄáá»áŹážáĄááŒáŹáž áááŻááČá· áĄáááčáá«ááșáááșáá±áŹááșáááșá á„ááᏠáá°ááŹážááœá±ááŸáŹáááŻáááș ááá»ááŻá·áá°ááœá±á áá»á±áŹááșážááŹážááœá±á ááá»ááŻá·áá°ááœá±á áááŹááœá± á ááá»ááŻá·áá°ááœá±á áĄáá»áșááźááŹááœá± á áááșá·ááŒá áșáá±á«á·áá»áŹáâ ááᯠáá»áᯠááĄá ááá«áá° áá»áá±áŹáșááŒá±áŹááČá·áá°ááČááŸáŹ :p á áĄáČá·áááŻááČ object-oriented programming áááŻáááș object áá áșááŻá ááŻá¶á á¶áá»ááŻážá áŻá¶ áĄááœááșáááșááźážáááŻááșááČá· á áœááșážáááș ááŸááá«áááșá
ááŸááșááŹážáááș :
Child Class (Sub Class) ááČááá± Parent Class (Super Class) ááČááŸáŹ ááŸáááČá· ááŹáááșáá° Method ááᯠOverriding ááœáŹážááŻááșááŒááșážááᯠááŒá±áŹááŹáá«á
á„áááŹ
//super class áá
áșááŻáá«
class Animal {
//eat áááŻááČá· method áá
áșááŻááŸááááș
void eat() {
print("Dog is eating");
}
}
class Dog extends Animal {
// sub class ááČááŸáŹááČ eat áááŻááČá· method áááŸááá±áááșá áá«áá±ááČá· áĄáá±á«áșá parent ááČá method áááșáááŻážááᯠááœáŹážááŒáźáž override ááŻááșáááŻááșááŒááșážááŒá
áșáá«áááșá
@override
void eat() {
print("ááĄá is eating");
}
}
void main() {
Animal animal = Animal();
animal.eat();
Dog dog = Dog();
dog.eat();
}
áááááŒáŻáááș @override áááŻááČá· keyword ááááșá·ááČáá±ážááČ ááááŻáááșááĄááŻááșááŻááșáá±ááŸáŹááŒá áșáá«áááșá áááŻá·áá±ááČá· @override áááșá·áá±ážááŹá good practice ááŒá áșááŹááŒá±áŹááșá·áááșá·áá±ážáá«á
Class áĄááœááșážááŸáŹááŸáááČá· variable áááŻá· method ááœá±ááᯠobjects áááșááźážááČá·áĄáá« áá»áá±áŹáșáááŻá· áá°ááŻá¶ážáááșá áĄáČá·ááᯠáá°ááŻá¶ážááŒáźážáááșááźážááČá·áĄáá« ááá»ááŻá· áá°ááŻá¶ážááááșá· properties ááœá±ááČá· áááșáááŻážá áá°ááźááČá· áááșáááŻážááœá± ááᯠáá»áá±áŹáșáááŻá· áááșááźážááČá· objects ááœá±ááᯠááŒááșáá±ážááČá·áĄáá«áá»ááŻážááŸáŹ static áááŻááŻá¶ážááŒáźáž ááŒááșáá±ážáááŻá·ááááșá method ááœá±ááČ áááŻáááșážáá°á áœáŹááČ áá°ááźááČá· áĄááŹááœá±áááșáá«áá« ááŻááșáá±áŹááșáážáá±áááŒáźáááŻáááș ááŻá¶áá± method ááœá±áĄáá±ááŒááșá·áááșááŸááșáááŻááșáááŻá·ááá«áááșá ááź static ááᯠáá±áŹááșážáá±áŹááșážááŻá¶ážá áœáČáááșáááș memory usage (optimize) áááșááŹááŒáźáž ááááŻááááșá ááŸááșááŸááŒáźáž ááœááșáááșáá±ááŸáŹáá«á
áĄáá±á«áșááŸáŹ ááŒá±áŹááááŻááČ Class ááœááșážá variable ááœá±ááᯠobject instances ááœá±á share ááŻá¶ážáá±ááČá·áĄááŒá±áá±ááŸáŹ static keyword áááŻááŻá¶ážáááșá áĄáČá· static variable á Class ááᯠááŹáá±á«áșááŹááČá· áá áșáá»áááșááČ initialized ááŻááșáááșá áá±áŹááșáááșááá« ááŹáá±á«áșáááș áá°á áááșááŒáźáž áááșáááŻážááᯠáááșááŸááșáá±ážá ááŹááááŻááŹááŒá±áŹááșá· memory ááŸáŹáá±ááŹááá°áá±áŹá·áá°:á áá«ááŒá±áŹááșá· memory usage optimize ááŒá áșáááșá
class Student {
int id;
String name;
static String schoolName = "áááŻá¶ áááčááááŻááș";
Student(this.id, this.name);
void display() {
print("Id: ${this.id}");
print("Name: ${this.name}");
print("School Name: ${Student.schoolName}");
}
}
void main() {
Student s1 = new Student(1, "áá»á±áŹáșáááșážáááșá·");
s1.display();
Student s2 = new Student(2, "áá±áŹááșááČá„");
s2.display();
}
áĄáá±á«áșá á„áááŹáááŻááŒááșá·áááș áá»á±áŹááșážááŹážááŸá áșá„áźážááŸááááșá ááŹáááșááá±áŹá· áĄáá±ááČá·áĄáá± ááœá±ážááČááá±ážááŹááá°áá°ážá áĄáČá·áá±áŹá· áĄáČá·ááŸá áșáá±áŹááșá áááșááČá·áá»á±áŹááșážá áááŻá¶áááčááááŻááș áá°áááșá áĄáČá·áááŻáá°ááČá· áá±áᏠvariable áááșáááŻážááᯠParent Class ááČááŸáŹ static ááŻá¶áá±áááșááŸááșáá±ážáááŻááșáááșá áá«ááČ static áááŻááŹá
class Circle {
static double calculateArea(double pi, double radius ) {
return (pi * radius * radius);
}
}
void main() {
print(
"The circle area is ${Circle.calculateArea(3.14159, 2)}");
}
Circle Area ááœááșáááșáááŻáááș ááŻá¶áá±áááșáž Ï Ă r2 áááŻáá±áŹá· áá°á áááșáá±áŹá·á០ááá»áááșážááČá·áĄáᏠáááșáááŻááČááœááșááœááș ááź formula ááČáááŻáá±áŹá· áááș object áááŹáá°ááŻá¶ážááŻá¶ážáá«ááČ ááŻááșáá±ážáá±ááŸáŹ áĄáČá·áááŻááŒá±áá±áá»ááŻážááŸáŹ static method áááŻááŻá¶ážáááŒááșážááŒá áșáááșá
ááŸááșááŹážáááș
- static method ááᯠáá±á«áșáá°ááŻá¶ážáááŻá· instance object áá±áŹááșá ááŹááááŻáá°ážá
Key Points To Remember
- Static members ááœá±á Class.staticName áĄáČá·ááᯠáá±á«áșáá°ááŻá¶ážáááŻá·áá
- static method áááșáá±áŹááșáááŻááșááŹááČá· Class á áĄáČá· method ááᯠáá±á«áșáá°ááŻá¶ážá áœáČááœááșá·ááŒáŻááŹážááŒáźážááŹážááŒá áșáááșá
Enum In Dart
Dart ááŸáŹ keyword enum ááᯠááŻá¶ážááŒáźáž ááááșážáá±áááșáááŻážáá»áŹáž ááᯠáááŻááșá
áŹážááŒáŻáááșááźážáááŻááșáá«áááșá
áá±ážáááșážááŻá¶á á¶
enum enumName {
constantName1,
constantName2,
constantName3,
...
constantNameN
}
á„áááŹ
// ááááșážáá± áĄáá±áŹááșááŻá¶ážáá»ááŻážáááșáááŻážáá«áááșááČá· enum áá
áșááŻááᯠáááșááźážááŹážáááŻááșáá«áááș
enum Color {
red,
green,
blue,
}
void main() {
// enum Class ááᯠááŻá¶ážááŒáźáž instance áá
áșááŻáááșááźážáááŻááșáá«áááș
Color myColor = Color.blue;
// áááŹááČá· color áááșáááŻážááœá±ááᯠá
á
áșááŒáźáž print ááŒááșááŻááșáá±ážáááŻááșáá«áááșá
if (myColor == Color.red) {
print("It's a red color!");
} else if (myColor == Color.green) {
print("It's a green color!");
} else if (myColor == Color.blue) {
print("It's a blue color!");
} else {
print("It's some other color.");
}
}
Real World shopping cart Project áá áșáᯠáááșáá±áŹááșááŒááșá·áá«áááșá
// enum product categories áá
áșáᯠáááșáá±áŹááșáááŻááșáááș
enum ProductCategory {
electronics,
clothing,
}
// product calss áá
áșáᯠáááșáá±áŹááșáááŻááșáá«áááșá
class Product {
//properties ááœá±áááșááŸááșáááș
String name;
double price;
// enum ProductCategory class áááŻááźááŸáŹ ááŹáá±á«áșááŻá¶ážááŹážáá«áááș
ProductCategory category;
Product(this.name, this.price, this.category);
}
// shopping cart áá
áșáᯠáááșááźážáááŻááșáááș
class ShoppingCart {
//product class items list property áá
áșáᯠáááșáá±áŹááșáááŻááșáá«áááșá shopping cart áááŻáᏠproduct áá
áșááŻáááșáá áááșá·áááŻá·ááááșáááŻááșááŹážá
List<Product> items = [];
// shopping cart ááČááᯠáááșá·áááŻá· method áá
áșáᯠáááșááźážáááŻááșáááșá
void addProduct(Product product) {
items.add(product);
print('${product.name} added to the shopping cart.');
}
// shopping cart ááČááŸáŹ ááŸáááČá· item ááœá±ááČá· total price ááᯠááœááșáááŻá· áá±áŹááșááČá· method áá
áșááŻáááșááźážááŹážáá«áááșá
// Method to calculate the total price of items in the shopping cart
double calculateTotal() {
double total = 0;
for (var item in items) {
total += item.price;
}
return total;
}
// shopping cart áá±ááŹááœá±ááᯠááŒáááŻá· method áá
áșááŻáááșáá±áŹááșááŹážáá«áááș
void displayCart() {
print('Shopping Cart Contents:');
for (var item in items) {
print('- ${item.name} \t \$${item.price.toStringAsFixed(2)}');
}
print('Total: \$${calculateTotal().toStringAsFixed(2)}');
}
}
void main() {
// products class ááᯠáá±á«áșááŒáźáž laptop ááČá· shirt objects ááœá±áááșáá±áŹááșáááŻááșáá«áááșá
var laptop = Product('Laptop', 899.99, ProductCategory.electronics);
var shirt = Product('T-Shirt', 19.99, ProductCategory.clothing);
// shopping cart class áááŻááŻá¶ážááŒáźáž cart object áá
áșáᯠáá±áŹááșáá«áááș
var cart = ShoppingCart();
// shopping cart áĄáá±á«áșááá±áŹááșááŹážááČá· laptop ááČá· shirt object ááœá±ááᯠcart object á addProduct method ááᯠááŻá¶ážááŒáźáž shopping cart ááČáááșá·áááŻááșááŒááșážááŒá
áșáá«áááșá
cart.addProduct(laptop);
cart.addProduct(shirt);
// shopping cart ááœá±ááČá·áááșáááŻážááᯠááźááŸáŹááŒááșááŻááșááŒááșá·áá«áááș
cart.displayCart();
}
Advantages Of Enum In Dart
- áĄáááșáá±ážááŹážáá±áŹááááșážáá±áĄá áŻáá áșáᯠáááșááźážáááŻááșááŒááșáž
- ááŻááș ááááșážááááșážáááœááșáá°á á±áá«áááș
- ááŻááș ááᯠááŒááșáááșáĄááŻá¶ážááŒáŻáááŻááșááŒááșáž (code reusable)
#
Abstract classes ááœá±á ááŻá¶ááŸááș class ááœá±áááŻáá»ááŻáž initialized ááŻááșáááŻá·áááá«áá°ážá initialized ááŻááșáááŻá·áááá°ážáááŻááŹá abstract class áááŻááŻá¶ážááŒáźáž object instance áááșáá±áŹááșáááŻá·áááá«áá°ážá áááșážááááșááœááșáá»ááșá áá°á·ááᯠáááŒáŹáž class ááœá ááŹááŒáźáž extends ááŹááŻááșááŒáźáž inherited ááŻááșáá°áááŻááșáááŻá·áááșááœááșááŹážááŒááșážááŒá áșáá«áááșá abstract class ááᯠabstract keyword ááŻá¶ážááŒáźážáááșááźážááá«áááșá
á„áááŹ
// Shape Abstract class áá
áșáᯠáááșáá±áŹááșáá«áááșá
abstract class Shape {
// Abstract method áá
áșááŻáá« áááșáá±áŹááșáááŻááșáá«áááșá body áá«ááœááșá·áááŸááá«á
double calculateArea();
}
// Circle áᏠááźáá±ááŹááŸáŹ Concrete subclass ááŒá
áșááœáŹážáá«áááșá ááŹáááŻá·ááČáááŻáááș Shape ááᯠextends keyword ááČá· áĄááœá±áááșáá¶áááŻááșáááŻá·áá«á
class Circle extends Shape {
double radius;
Circle(this.radius);
// polimorphism method override áááŻááŻá¶ážááŒáźáž abstract method áá
áșááŻáááșáá±áŹááșááŹážáá«áááșá
@override
double calculateArea() {
return 3.14159 * radius * radius;
}
}
void main() {
// Circle concrete subclass ááᯠááŻá¶ážááŒáźáž circle áááŻááČá· instance áá
áșáᯠáááșáá±áŹááșáááŻááșáá«áááșá
var circle = Circle(5.0);
//concrete abstract method ááᯠpirnt ááŻááșááŒááșá·áá«áááș
print('Area of the circle: ${circle.calculateArea()}');
}
img ref link
ááŸááșááŹážáááș
- (area method) áá°ááźááČá· method ááœá± áĄááŒáŻáĄáá°ááœá± ááŸááá±ááČá· classes (ááŻá¶) áĄá (rectangle ááŸááșá· cicle)ááᯠclasses ááœá± áĄááœááș ááá±ááŹááČááŸáŹ ááŹáá±áŹááșá áŻáá±ážááŒá±áŹááŒáŹáááșááŸááșáááŻá· abstract class ááœá±ááᯠáĄááŻá¶ážááŒáŻáááŻááșáá«áááșá
- abstract class ááČá· object ááœá±áááșááźážáááŻá·áá
- áááșážááŸáŹ abstract ááŸááșá· non-abstract methods ááœá±áááșááźážáááŻááșáá«áááș
- áááșážááᯠáááŒáŹáž classes ááœá±ááČá· áá°ááźááČá· method ááœá±áááșá·ááœááșážááŒá±áŹááŒáŹááŹážáááŻá·ááŹááŒá áșáááș no body (no return type) áááŸááááșá·áá«á (áááșá·áá±ážááČ error ááááșáá« áááŻá·áá±ááČá· abstract class ááœá±á á á¶áá°ááșážáĄá body áááŸááááșá·ááČ subcalss ááœá±áááČ abstruct method ááœá±ááᯠoverride ááŻááșáááșááŒá áșáá«áááș)
Interface(áĄááșááŹáá±á·á áșáá áșááŻ) ááŸáŹ class áá áșááŻáááŻááșááŹáááá·áș syntax áá áșááŻááᯠáááșááŸááșááŒááșážááŒá áșáá«áááșá class áá áșááŻá ááŻááșáá±áŹááșáááŻááșááČá· áĄááŒáŻáĄááŸáŻááœá±ááᯠáááșááŸááșáá±ážáááŻááșááŒááșážááŒá áșáá«áááșá Interface áá áșááŻááᯠáááșááźážáá±áŹá·áááșáááŻáá»áŸááș sub class ááœá±á methods and properties ááᯠáĄáááĄáá» áááșá·ááœááșáž áááșááźážááŹážááŸááá«áááșá Dart ááŸáŹ Interface á abstract ááČá·ááŻááșáá±áŹááșáááŻááșá áœááșážááᯠáá±áŹááșáá áșáááșá·ááŒáŸááșá·áááșáá±ážáááŻááșááČá·ááá±áŹáá«ááČá
á„áááŹ
// abstract class as interface
abstract class Vehicle {
void start();
void stop();
}
// implements keyword ááᯠááŻá¶ážááŒáźáž car interface áá
áșááŻáááșáá±áŹááșááœáŹážáá«áááș
class Car implements Vehicle {
@override
void start() {
print('Car started');
}
@override
void stop() {
print('Car stopped');
}
}
void main() {
var car = Car();
car.start();
car.stop();
}
áĄáá±á«áșááŸáŹ ááŒá±áŹááČá·áᏠDart ááŸáŹ Multiple Inhertiance áááŸááá°ážáááŻá ááŻááșáá«áááș Classes áĄáá»ááșážáá»ááșáž Multiple Inhertiance ááŻááșááœááșá·áááŸááá«á áááŻá·áá±ááČá· Multiple Inheritance ááŻááșáááŻá·áááŻáĄááșááŹáááș Interface ááᯠááŻá¶ážááŒáźáž Multiple Inheritance ááŻááșáááŻááșáá«áááșá
á„áááŹ
// interface abstract class
abstract class CalculateTotal {
int total();
}
// interface abstract class
abstract class CalculateAverage {
double average();
}
// implements multiple interfaces áááŻááźááŸáŹ ááŻá¶ážááœáŹážáá«áááș
class Student implements CalculateTotal, CalculateAverage {
// properties
int marks1, marks2, marks3;
// constructor
Student(this.marks1, this.marks2, this.marks3);
// implementation of average()
@override
double average() {
return total() / 3;
}
// implementation of total()
@override
int total() {
return marks1 + marks2 + marks3;
}
}
void main() {
Student student = Student(90, 80, 70);
print('Total marks: ${student.total()}');
print('Average marks: ${student.average()}');
}
Extends | VS | Implements |
---|---|---|
sub class áááș super class áá¶á០áĄááœá±áááșáá¶áááŻá·ááŻá¶ážáááș |  | áĄááŒáŹáž class áá áșááŻááœááș interface áá áșááŻáĄááŒá áș class áá áșááŻááᯠáĄááœá±áááșáá¶áááș áĄááŻá¶ážááŒáŻáááșá |
sub class ááá± super class áá¶á០complete method áá áșááŻááŻá¶ážááᯠáá°ááŻá¶ážáááŻááșáááș |  | abstract method áááŻááČ sub-class áá¶áááșáááșá·áááșážáááŻááșáááș. |
Muliple inheritance áá | Â | Multiple inheritance ááááș |
method override ááŻááșáá»ááșááČá áááŻááșáá»ááșááČá |  | method override ááŻááșááᯠááŻááșááŸá |
subclass ááČá· constructor á subcalss ááČá· construcotr ááá±á«áșáááș áĄáááș áá±á«áșááááș |  | subclass ááŸáŹ constructor ááááŻáá°áž |
subclass ááᯠsuber keyword ááŻá¶ážááŒáź: subclass ááŸáŹááŻá¶ážáááŻá·á |  | super keyword ááŻá¶ážáá |
subclass ááŸáŹááŸáááČá· properties áááșáááŻážááᯠáááŻáĄááșáááș áááŻáĄááșáááᯠsubclass ááá± áá»áááșážááœááșá·ááŸá |  | superclass interface á fields ááœá±ááᯠoverride ááŻááșááᯠááŻááșááŸááááș |
ááŸááșááŹážáááș áĄáá»ááșáá»áŹáž
- Interface áááș Class áá áșááŻá ááŻááșáá±áŹááșáááŻááșáá±áŹ áĄááŸáŻáĄááŹáá»áŹážááᯠáááșááŸááșáá±ážáááŻááșááŒááșáž
- Dart ááŸáŹ interface keyowrd áááŸááá«á abstract áááŻááČ ááŻá¶ážááŒáźáž interface áááșáá±áŹááșáá«áááșá
- Interface áááŻááŻá¶ážááŒáźáž multiple inheritance ááᯠdart ááŸáŹááŻááșáá±áŹááșáááŻááșáá«áááșá
#
Mixin áááŻáᏠclass áĄáá»ááșážáá»ááșážááŒáŹážááŸáŹ ááŻááșááœá±ááᯠááŒááșááŻá¶ážáááŻá· áááČá· áááșážáááșážáá áșááŻááŒá áșáá«áááșá mixin keyword áááŻááŻá¶ážááŒáźáž mixin class áá áșááŻáááșáá±áŹááșáá«áááșá mixin class ááᯠáá±á«áșááŻá¶ážááČá·áĄáá« with áááŻá· on keyword ááČá· ááŻá¶ážááŒáźáž áá±á«áșááá«áááșá class áá áșááŻááŸáŹ mixin áá áșááŻáááșáááŻááČá· class ááœá±ááᯠáá±á«áșáá°ááŻá¶ážá áœáČáááŻááșáá«áááșá
Rules For Mixin
- object instance áá±áŹááșáááŻá·áááá°ážá
- class áĄáá»ááșážáá»ááșáž ááŻááșááœá± áá»áŸáá±áááŻá· mixin áááŻááŻá¶ážááŒááșážááŒá áșáááșá
- mixin ááŸáŹ construcotr áááŸá áááᯠextend ááČááŻááș áááŻá·áááá«á
- class áá áșááŸáŹ multiple mixin ááœá±áá±á«áșááŻá¶ážáááŻá·ááá«áááș
á„áááŹ
mixin CanFly {
void fly() {
print('I can fly');
}
}
mixin CanWalk {
void walk() {
print('I can walk');
}
}
class Bird with CanFly, CanWalk {
}
class Dog with CanWalk {
}
void main() {
var bird = Bird();
bird.fly();
bird.walk();
var dog = Dog();
dog.walk();
}
áĄáá±á«áșá example áááŻááŒááșá·áááș ááŸááșá áá»á¶ááČ áá»á¶áááŻááșáááșá áááșážááČáá»áŸá±áŹááșáááŻááșáááșá áá«ááŒá±áŹááșá· Bird Class á canWalk ááČá· canFly mixin ááŸá áșááŻááᯠáááŻááᯠmultiple áá±á«áșááŻá¶ážááŹážáááșá Dog ááœá±ážá áááșážááČáá»áŸá±áŹááșáááŻááșáááș áá«ááŒá±áŹááșá· mixin canWalk áááŻááČ áá°ááŻá¶ážááŹážááŒááșážááŒá áșáááșá mixin ááᯠáááŻá¶ážáááș canWalk áááŻááČá· method ááœá± áááșáá«áááșáá«áá±ážáá±áááŸáŹáá«á Dart ááŸáŹ mixin á DRY (Donât repeat yourself) ááŒáżááŹááᯠááŸááșážáá±ážááœáŹážááŒááșážááŒá áșáá«áááșá
Mixin á ááșážáá»á„áșážáá»áŹáž
regular, abstract, ááŸááșá· static methods ááœá±áááșá·ááœááșážáááŻááșáááș
class ááœááș mixin áá áșááŻáááșáá áááșá·ááœááșážáááŻááșáááș
áĄáááșááŸáŹ áá»áá±áŹáșáááŻá· áá±á·ááŹááČá·ááČá· Constructor ááœá±á Generative constructors ááœá±ááŒá áșáá«áááșá Generative constructors ááŸáŹ return type áááŸááá°ážá áá°áááŻá·á object áá áșáᯠáááșááźážáá±ážáááŻááșááŹááČááŸááá«áááșáâáá«áá±ááČá· Factory Constructor ááŸáŹáá»áá±áŹá· Class áá áșááŻáĄááœááșážááŸáŹ object áá áșááŻáááșáá±áŹááșáá±ážáááŻááșááŹáĄááŒááș object ááᯠáá« return ááŒááșáá±ážáááŻááșáá«áááșá
Factory Constructors á ááșážáá»á„áșážáá»áŹáž
- Factory constructor áá áșááŻáá±áŹááșááŒáźáááŻáááș áááŒá áșááá± object instance áá áșáᯠbase calss áááŻá· subcalss return ááŒááșáá±ážááá«áááșá
- this keyword ááᯠááŻá¶ážáááá«
- name constructor ááČáá±áŹááșáá±áŹááș unname constructor ááČáá±áŹááșáá±áŹááșááá«áááșá
- class á instance members ááœá±ááᯠaccess áááŻááșááœááșá·áááŸááá«á
áááááŻá¶ážáž Factory Constructor ááá«ááČâáĄáá±á«áșááŸáŹ áááșááČá·ááČá· constructor ááᯠá„ááᏠááŒáá·áșááŒááșá·áá«áááșá
class Area {
final int length;
final int breadth;
final int area;
/* Dart á Initializer list áá«á áááșážá ááá±áŹá
constructor body : area = length * breadth ááᯠááœáŹážááááááș Area(tthis.length ááČá· this.breadth) ááᯠáááșáááŻážááœá± assign ááŹááŻááșááŒáźážá០body ááᯠááœáŹáž run ááŒááșážááŒá
áșáá«áááșá
*/
const Area(this.length, this.breadth) : area = length * breadth;
}
void main() {
Area area = Area(10, 20);
print("Area is: ${area.area}");
// notice that here is a negative value
Area area2 = Area(-10, 20);
print("Area is: ${area2.area}");
}
áĄáČá·ááŻááșááᯠááŒááșá·áááș -10 áááșáááŻážáá«áá±ááČ error ááááșááČ áĄááŻááșááŻááșááœáŹážááŸáŹáá«á area ááœááșáá»ááșááČá·áĄáĄáá« ááŸáŹ áĄáá°ááșáááșáááŻážááá«áááșá·áá«áá°ážá áá«ááᯠá á áșáá±ážááŒáźáž ááŸááșáááșááČá· ááááŻáááș áá áșááŻááșááŒá áșáĄá±áŹááșáá±ážáááŻááșáááŻá· Factory áááŻááŻá¶ážááá«áááșá áĄá±áŹááșá á„áááŹáááŻááŒááșá·áá«á
class Area {
final int length;
final int breadth;
final int area;
// private constructor
const Area._internal(this.length, this.breadth) : area = length * breadth;
/* Factory constructor ááźááŸáŹááŹáá±áŹááșáá«áááșá
áá°á·áĄááČááŸáŹ if ááČá·á
á
áșáá±ážááŒáźáž condition áĄáá±á«áșáá°áááșááŒáźáž error áááŻá· class instance ááᯠreturn ááŒááșáá±ážáá«áááșá
*/
factory Area(int length, int breadth) {
if (length < 0 || breadth < 0) {
throw Exception("Length and breadth must be positive");
}
// redirect to private constructor
return Area._internal(length, breadth);
}
}
void main() {
// This works
Area area = Area(10, 20);
print("Area is: ${area.area}");
// notice that here is negative value
Area area2 = Area(-10, 20);
print("Area is: ${area2.area}");
}
output
Area is: 200
Unhandled exception:
Exception: Length and breadth must be positive
áááŻááᯠerror output ááᯠááŻááșáá±ážáá«ááááșá·áááșá
ááŸááșááŹážáááș
- logic (eg. if condition) áááŻááŻá¶ážááŒáźáž factory constructor ááŸáŹ variable ááᯠfinal keyword ááŻá¶ážááŒáźáž ááŒááșáááșááŸááșáááŻááșáá«áááșá initializer list ááŸáŹ áááŻááșáááŻááșáá«áá°ážá
áá±áŹááșáááș á„ááᏠáá áșááŻáá±ážááŒááșá·áá«áááșá
class Person {
String firstName;
String lastName;
// constructor
Person(this.firstName, this.lastName);
// factory constructor Person.fromMap (fromMap áááŻáᏠname constructor ) áá±áŹááșáááŻááșááŹáá« ááŒááŻááșááŹáá±ážáááŻá·ááá«áááșá parameter áĄáá±ááČá· Map<String, Object> map áááșáááŻážááᯠáááșáá¶ááŹážáá«áááșá áĄááČááŸáŹ final keyword ááČá· variable ááœá±áááŻážááᯠááŒááș ááŒáźáž áááșááŸááșáá±ážáááŻááșáá«áááșá áá±áŹááșááŻá¶ážááŸáŹ Person() instance áá
áșááŻááᯠreturn ááŒááșáá±ážáááŻááșáá«áááșá
factory Person.fromMap(Map<String, Object> map) {
final firstName = map['firstName'] as String;
final lastName = map['lastName'] as String;
return Person(firstName, lastName);
}
}
void main() {
// create a person object
final person = Person('John', 'Doe');
// create a person object from map
final person2 = Person.fromMap({'firstName': 'Harry', 'lastName': 'Potter'});
// print first and last name
print("From normal constructor: ${person.firstName} ${person.lastName}");
print("From factory constructor: ${person2.firstName} ${person2.lastName}");
}
Key Points
- factory keyword ááᯠááŻá¶ážááŒáźáž áááșááźážááááș
- instance (object) ááᯠsame class áááŻá· subclass return ááŒááșáá±ážáááș
- singleton design patterns ááŻá¶á á¶ááŒá áșáááșá áĄááŒáČáááșáž cache data instance áááŻááŒááșáá±ážáááșá
object data ááŻá¶á
á¶áĄáá»ááŻážáá»ááŻážááČá· áááșáá¶ááŒáźáž áĄááŻááșááŻááșáá±ážáááŻááșááČá· class ááœá± áá«áááŻááș functions ááœá± ááᯠGenerics ááœá±áááŻá·áááșááŸááșááŹáá«á á„ááᏠlist class ááᯠááŻá¶ážáááșáááŻáááș List
áá±ážááŹážááŻá¶á á¶á
class ClassName<T> {
// code
}
áá«áááŻáááș áá»áá±áŹáșáááŻá· áááŻážáááŻážáĄáá±á«áșááŸáŹáá±á·ááŹááČá·ááČá· class ááœá±ááČá· Generics class ááœá±ááᯠááŸá„áșááŒáźážáá±ážááŒááșá·áááșáá
// Without Generics
// Creating a class for int
class IntData {
int data;
IntData(this.data);
}
// Creating a class for double
class DoubleData {
double data;
DoubleData(this.data);
}
void main() {
// Create an object of IntData class
IntData intData = IntData(10);
DoubleData doubleData = DoubleData(10.5);
// Print the data
print("IntData: ${intData.data}");
print("DoubleData: ${doubleData.data}");
}
// Using Generics áᏠdata ááČ áááșá·áá±ážáá±áž <T> ááČá· áááșáá¶ááŹážážááŒáźáž data type ááœá±ááœáČááŒááșážááŒáźáž áĄááŻááșááŒááșááŻááșáá±ážáááșá
class Data<T> {
T data;
Data(this.data);
}
void main() {
// object áááșáá±áŹááșáááșáž áááșá·áá±ážááČá· data type áááŻáá«áááșááŸááșáá±ážáááŻááșáááș
Data<int> intData = Data<int>(10);
Data<double> doubleData = Data<double>(10.5);
// print the data
print("IntData: ${intData.data}");
print("DoubleData: ${doubleData.data}");
}
áááŻáá±áŹá· generic ááŻá¶ážáááŻááșáá±áŹá· class ááœá± áĄáá»áŹážááŒáźážáá±áŹááșáá±á ááŹááááŻáá±áŹá·ááČ áá áșááŻááČáá±áŹááșááŻá¶ááČá
Name | Type |
---|---|
T | Type |
E | Element |
K | Key |
V | Value |
đ áĄáá±á«áșá áá±á·ááŹááČá·ááČá·áĄááŹááœá±ááᯠáá±á«ááșážá ááșááŒáźáž ááááá áááșáá°ážáááŻááșááá±áŹááș áĄááŻá¶ážáááŸááááșááźážáááŻááșáááșá
đ OOP ááČá· áĄááŸá áșááŹáá ááŻááșááᯠresuable ááŒá áșááŒá áșááČá· áááșážáááŻááșááá»áŸ áááșážááČá· áá±ážááŹážáááŻááșáááŻá·áá«ááČá
Copyright © usaiko.dev