Junior
Фарқи байни функсияҳои бе номи ва оддӣ чист?
sobes.tech AI
Ҷавоб аз AI
Функсияҳои номаълум функсияҳое мебошанд, ки ном надорад. Онҳо одатан барои даъватҳои яккарата ё ҳамчун callback истифода мешаванд.
Фарқиятҳои асосӣ:
- Ном: Функсияҳои оддӣ дорои номи ҳастанд ва метавонанд бо он даъват шаванд. Функсияҳои номаълум ном надоранд.
- Таъриф: Функсияҳои оддӣ бо калидвожа
func(ё баробар дар дигар забонҳо) ва номи, пас аз он параметрҳо ва бадан таъриф мешаванд. Функсияҳои номаълум "дар ҷой" таъриф мешаванд, одатан дар ҷойи истифодаи онҳо. - Пас кардан: Функсияҳои номаълум одатан ҳамчун аргумент ба функсияҳои дигар дода мешаванд (масалан, дар методҳои
map,where,forEach). Функсияҳои оддӣ низ метавонанд дода шаванд, аммо бештар барои таъриф кардани логикаи бо номи даъватшаванда истифода мешаванд. - Ҳудуд: Функсияҳои номаълум ба тағйирёбандаҳо аз ҳудуди, ки дар он таъриф шудаанд, дастрасӣ доранд (эффекти "завол" аз closure). Функсияҳои оддӣ одатан ҳудуди худро доранд.
Масал дар Dart/Flutter:
Функсияи оддӣ:
void greet(String name) {
print('Салом, $name!');
}
// Даъвати функсияи оддӣ
greet('Дунё');
Функсияи номаълум (лямбда):
// Истифодаи функсияи номаълум дар итерросияи рӯйхат
List<int> numbers = [1, 2, 3, 4, 5];
numbers.forEach((number) {
print(number * 2); // Функсияи номаълум, ки иҷро мекунад мултипликация
});
// Функсияи номаълум, ки ба тағйирёбанда таъин шудааст
var multiplyByTwo = (int number) => number * 2;
print(multiplyByTwo(5));