Simple code with dart extension methods


Extension methods ທີ່ເປີດໂຕໃນ dart 2.7 ຄືໜຶ່ງໃນ feature ທີ່ດີງາມຂອງ dart programing ທີ່ເຮັດໃຫ້ສາມາດເພີ່ມ function ເຂົ້າໄປໃນ library ທີ່ມີຢູ່ແລ້ວໂດຍທີ່ບໍ່ຕ້ອງຮູ້ວ່າ library ນັ້ນໆມັນເຮັດວຽກແນວໃດ. ຕົວຢ່າງເຊັ່ນຖ້າເອົາ library ຄົນອື່ນມາໃຊ້ແລ້ວຢາກເພີ່ມ function ໃດໜຶ່ງເຂົ້າໄປເພີ່ມເພື່ອຄວາມສະດວກຂອງເຮົາເຊິ່ງມັນເປັນໄປບໍ່ໄດ້ທີ່ຈະເຮັດແບບນັ້ນນອກຈາກຈະໄປ contribue library ນັ້ນ 😅.

Extension methods ໜ້າຕາເປັນແນວໃດ?

ຕົວຢ່າງການແປງ string ເປັນ double

double.parse("5.3");

ແລ້ວຖ້າເຮົາແປງມັນໄດ້ຢູ່ໃນ string type ເລີຍມັນຈະບໍ່ສະອາດງາມຕາດີກ່ອນບໍ່?

"5.3".toDouble();

ແລະນີ້ຄື extension method ໃນ dart 😉 ການໃຊ້ງານງ່າຍໆແບບນີ້ເລີຍ. ການຮ້ອງໃຊ້ method ແບບນີ້ເຮົາຄຸ້ນເຄີຍກັນດີກັບການແປງ type ຕ່າງໆເປັນ string ເຊັ່ນວ່າ: 12.toString() , DateTime.now.toString() ເອົາເປັນວ່າຄິດຫຍັງບໍ່ອອກຢາກແປງເປັນ string ກໍ່ພຽງແຕ່ຮ້ອງໃຊ້ .toString() 😃.

ການສ້າງ Extension methods

ການສ້າງ extension method ຂຶ້ນມາໃຊ້ງານນັ້ນຈະມີ systax ແບບນີ້:

extension <extension name> on <type> {
  .
  .
  .
  (<member definition>)*
}

ຕົວຢ່າງ

extension format date time

extension DateTimeExtension on DateTime {
  String format([String pattern = 'dd/MM/yyyy', String? locale]) {
    DateTime.now.toString();
    return DateFormat(pattern, locale).format(this);
  }
}
DateTime.now().format(); // 19/03/2023

extension ແປງ stringເປັນ double

extension ConvertStringToDouble on String {
  double toDouble() => double.tryParse(this) ?? 0.0;
}
"100.5".toDouble(); // 100.5
"not number".toDouble(); // 0

ສັງເກດເຫັນວ່າການສ້າງ method member ຂອງ extension ບໍ່ໄດ້ແຕກຕ່າງຫຍັງຫຼາຍກັບການສ້າງ method ໃນ class ນອກນັ້ນຍັງສາມາດ access public members ຕ່າງໆຂອງ class type ທີ່ເຮົາສ້າງ extension ໃຫ້. ເບິ່ງແລ້ວກໍ່ຄືກັບວ່າເຮົາ extends class ນັ້ນ ແຕ່ທີ່ແຕກຕ່າງຈາກການ extends ກໍ່ຄືມັນບໍ່ແມ່ນການສ້າງ class ໃຫມ່ຂຶ້ນມານັ້ນເອງ.

Unnamed extensions

ການສ້າງ extension ນັ້ນສາມາດບໍ່ໃສ່ຊື່ກໍ່ໄດ້. ແຕ່ປະເພດ extension ນີ້ສາມາດຮ້ອງໃຊ້ static method ຂອງມັນໄດ້ພາຍໃນ extension ບ່ອນທີ່ເຮົາ define ມັນຂຶ້ນມາເທົ່ານັ້ນ ເວົ້າແບບງ່າຍໆແມ່ນຈະຮ້ອງໃຊ້ຢູ່ file ອື່ນໆແມ່ນບໍ່ໄດ້.

// convert_string_to_number_extenstions.dart

extension on String {
  double toDouble() => double.tryParse(this) ?? 0.0;
}


extension ConvertStringToDouble on String {
  double convertToDouble() => toDouble();
}

generic extensions

ເຮົາສາມາດສ້າງ extension ທີ່ເປັນ generic type ໄດ້ ເຊັ່ນ:

extension GenericList<T> on List<T> {
  bool get memberIsString => T is String;

  List<double> get toListNumber {
    List<double> numbers = [];
    forEach((val) {
      numbers.add(double.tryParse(val as String) ?? 0.0);
    });
    return numbers;
  }
}

ສະຫຼຸບ

  • helper function ແປງມາເປັນ extension ກັນໄດ້ແລ້ວ
  • extension ມັນສາມາດ reuse ໄດ້ຢູ່ໃນ project ອື່ນໆ
  • ສ້າງ/ໃຊ້ງານງ່າຍ, code ສະອາດຂຶ້ນໃຊ້ເລີຍຢ່າຄິດຫຼາຍ!

ສາມາດອ່ານເພີ່ມຕື່ມກັນໄດ້ທີ່:
https://dart.dev/language/extension-methods

ຂອບໃຈທີ່ອ່ານກັນຮອດຈຸດນີ້ ໄວ້ພົບກັນໃນບົດຄວາມຕໍ່ໄປ

ຂຽນໂດຍ: xangnam phiasakha