Nini maana ya named constructor
Katika lugha nyingi za kompyuta unaweza kuwa na constructor zaidi ya moja zenye jina moja kwenye class. Lakini kwenye Dart huwezi kufanya hivi. Ili uweze kutegeneza constructor zaidi ya oja zenye jina moja utatumia named constructor.
Named constructor ni constructor ambayo ina jina sawa na constructor iliyotangulia hivyo inaongezewa keyword namedConstructor.. Kwa mfano hapa nitaleta constructor mbili zenye jina moja.
class Gari {
//costructor
Gari() {
}
//named constructor
Gari.namedConstructor(){
}
}
Hapo kuna construct mbili ambazo zote zinatumia jina moja Gari. Na wakati wa kutengeneza object utatumia hivyo hivyo namedConstructor keyword. Angalia ,fano hapo chini:-
class Gari {
//costructor
Gari() {
print("Tunauza gari");
}
//named constructor
Gari.namedConstructor(){
print("Gari letu ni jipya");
}
}
void main(){
Gari();
Gari.namedConstructor();
}
constructor zote zinaweza kushirikiaan properties. Kwa mfano angalia hapo chini nakwenda kutumia properties kwenye constructor zote.
class Gari {
String? jina;
String? rangi;
int? matairi;
// Constructor
Gari(this.jina, this.matairi, this.rangi) {
print("Tunauza gari aina ya ${jina}, ina rangi ${rangi} na matairi ${matairi}");
}
// Named constructor
Gari.namedConstructor(this.jina, this.rangi, this.matairi) {
print("Gari mpya inaitwa ${jina}, ina idadi ya matairi $matairi na ina rangi $rangi");
}
}
void main() {
Gari("oyota Corolla", 6, "Nyekundu");
Gari.namedConstructor("Toyota Avalon", "nyeusi", 4);
}
Pia constructor method na named constructor zinaweza kutumia method moja kwa kushirikiana. Pia unaweza kuchanganya na default parameter.Angalia mfano hapo chini.
class gari {
String? jina;
String? rangi;
int? matairi;
gari(this.jina, this.rangi, this.matairi);
// here Mobile() is a named constructor
gari.namedConstructor(this.jina, this.rangi, [this.matairi = 4]);
void tangazo() {
print("Jina la gari ni: $jina.");
print("Rangi ya gar ni: $rangi.");
print("Idadi ya matairi ni: $matairi");
}
}
void main() {
var gari1 = gari("Toyota", "Nyusi", 6);
gari1.tangazo();
print(" ");
var gari2 = gari.namedConstructor("Bugati", "Nyeupe");
gari2.tangazo();
}
Pia unaweza kutumia constructor kwenye aina nyingine za data.
import 'dart:convert';
class Person {
String? name;
int? age;
Person(this.name, this.age);
Person.fromJson(Map<String, dynamic> json) {
name = json['name'];
age = json['age'];
}
Person.fromJsonString(String jsonString) {
Map<String, dynamic> json = jsonDecode(jsonString);
name = json['name'];
age = json['age'];
}
}
void main() {
// Here person is object of class Person.
String jsonString1 = '{"name": "Bishworaj", "age": 25}';
String jsonString2 = '{"name": "John", "age": 30}';
Person p1 = Person.fromJsonString(jsonString1);
print("Person 1 name: ${p1.name}");
print("Person 1 age: ${p1.age}");
Person p2 = Person.fromJsonString(jsonString2);
print("Person 2 name: ${p2.name}");
print("Person 2 age: ${p2.age}");
}
Constant constructor:
Hii constructor ambayo inakuwa na constant object. Constant object ni object ambayo value zake haziwezi kubadilika.constarctor hii hutengenezwa kwa kutumia const keyword. constructor hii ina sifa hizi:-
- Properties zake zote ni fnal
- Haina body
- Huanzishwa kwa kutumia const keyword.
Mfano wa constant constractor ni kama const gari()
class gari{
final String jina;
final String rangi;
final int matairi;
const gari(this.jina, this.rangi, this.matairi);
}
void main(){
gari toyota = gari("Toyota Avalon", "nyeupe", 4);
print("Tunauza gari aina ya ${toyota.jina}. Ina matairi ${toyota.matairi}. Ina rangi ya ${toyota.rangi}");
}
Unaweza pia kuitumia kwenye named parameter
class Car {
final String? name;
final String? model;
final int? prize;
// Constant Constructor
const Car({this.name, this.model, this.prize});
}
void main() {
// Here car is object of class Car.
const Car car = Car(name: "BMW", model: "X5", prize: 50000);
print("Name: ${car.name}");
print("Model: ${car.model}");
print("Prize: ${car.prize}");
}
Mwisho:
Katika somo linalofuata tutakwenda kusoma concept ya encapsulation kwenye OOP