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