June 1, 2022

Dartda ixtiyoriy parametrlar

Dartda ikki xil funksiya parametrlari mavjud: positional va named.

Ixtiyoriy pozitsion parametrlar

Pozitsion parametrlar sizga tanish bo'lgan parametrlardir:

int sumUp(int a, int b, int c) {
  return a + b + c;
}
// ···
  int total = sumUp(1, 2, 3);

Dart yordamida siz ushbu pozitsion parametrlarni qavs ichiga oʻrash orqali ixtiyoriy qilishingiz mumkin:

int sumUpToFive(int a, [int b, int c, int d, int e]) {
  int sum = a;
  if (b != null) sum += b;
  if (c != null) sum += c;
  if (d != null) sum += d;
  if (e != null) sum += e;
  return sum;
}
// ···
  int total = sumUpToFive(1, 2);
  int otherTotal = sumUpToFive(1, 2, 3, 4, 5);

Ixtiyoriy pozitsion parametrlar har doim funksiya parametrlari roʻyxatida oxirgi boʻladi. Agar siz boshqa standart qiymat kiritmasangiz, ularning standart qiymati null bo'ladi:

int sumUpToFive(int a, [int b = 2, int c = 3, int d = 4, int e = 5]) {
// ···
}
// ···
  int newTotal = sumUpToFive(1);
  print(newTotal); // <-- prints 15

Code example

Birdan joinWithCommas()beshgacha butun sonni qabul qiladigan, so'ngra vergul bilan ajratilgan raqamlar qatorini qaytaradigan funksiyani amalga oshiring. Funktsiya chaqiruvlari va qaytarilgan qiymatlarga ba'zi misollar:

String joinWithCommas(int a, [int b, int c, int d, int e]) {
  var total = '$a';
  if (b != null) total = '$total,$b';
  if (c != null) total = '$total,$c';
  if (d != null) total = '$total,$d';
  if (e != null) total = '$total,$e';
  return total;
}

Funktsiya chaqiruvi

joinWithCommas(1)       
joinWithCommas(1, 2, 3)     
joinWithCommas(1, 1, 1, 1, 1)

Qaytarilgan qiymat

'1'
'1,2,3'
'1,1,1,1,1'

Ixtiyoriy nomli parametrlar

Figurali qavs sintaksisidan foydalanib, siz nomlari bo'lgan ixtiyoriy parametrlarni belgilashingiz mumkin.

void printName(String firstName, String lastName, {String suffix}) {
  print('$firstName $lastName ${suffix ?? ''}');
}
// ···
  printName('Avinash', 'Gupta');
  printName('Poshmeister', 'Moneybuckets', suffix: 'IV');

Siz kutganingizdek, ushbu parametrlarning qiymati default holat bo'yicha null, lekin siz standart qiymatlarni berishingiz mumkin:

void printName(String firstName, String lastName, {String suffix = ''}) {
  print('$firstName $lastName $suffix');
}

Funktsiya bir vaqtda ham ixtiyoriy pozitsion, ham ixtiyoriy nomlangan parametrlarga ega bo'lishi mumkin emas.

Kod misoli

copyWith()MyDataObject sinfiga misol metodini qo'shing . U uchta nomlangan parametrni olishi kerak:

int newInt
String newString
double newDouble

Chaqirilganda , oldingi parametrlardan (agar mavjud bo'lsa) ob'ektning xususiyatlariga ko'chirilgan ma'lumotlar bilan joriy misol asosida copyWith()yangisini qaytarish kerak . MyDataObjectMisol uchun, agar newIntnull bo'lmasa, uning qiymatini ga ko'chiring anInt.

class MyDataObject {
  final int anInt;
  final String aString;
  final double aDouble;

  MyDataObject({
     this.anInt = 1,
     this.aString = 'Old!',
     this.aDouble = 2.0,
  });

  // copyWith metodingizni shu yerga qo'shing:
}

copyWith haqida qisqacha:

//copyWith bizga T ni nusxalash va parametr argumentlari o'rniga
//qayta qiymat yozish imkonini beradi.

class _HomePageState extends State<HomePage> {
  List<Product> products = [];

  @override
  void initState() {
    super.initState();

    Product sixSeaterDiningTableBrown = Product(
      id: "0",
      name: "6 Seater Dining Table",
      color: Colors.brown,
    );

    Product sixSeaterDiningTableBlack =
        sixSeaterDiningTableBrown.copyWith(color: Colors.black, id: "1");

    products.add(sixSeaterDiningTableBrown);
    products.add(sixSeaterDiningTableBlack);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Hello, copyWith!"),
      ),
      body: ListView(
          children: products
              .map((Product product) => ListTile(
                    trailing: Container(
                      width: 14,
                      height: 14,
                      color: product.color,
                    ),
                    title: Text(product.name),
                    subtitle: Text(product.id),
                  ))
              .toList()),
    );
  }
}

Maqola yoqqan bo'lsa do'stlaringizga ulashing va kanalimizga a'zo bo'ling:

Avtor: Mamasodiqov M

Kanal: Flutter Blogs