Гузариш ба мундариҷа
Мавзӯи 7 аз 16
Назария

Функсияҳо

Ин барои чӣ лозим аст

Тасаввур кунед, ки дар барнома даҳ маротиба нархро бо тахфиф ҳисоб кардан лозим аст. Мумкин аст як формуларо даҳ маротиба нусхабардорӣ кунед — ва баъд, агар формула иваз шавад, ҳамаи даҳ ҷойро ҷустуҷӯ ва ислоҳ кунед. Функсия инро ҳал мекунад: код як маротиба навишта мешавад, ном мегирад, ва минбаъд онро танҳо бо ном даъват мекунанд.

Функсияҳо — хишти асосии ҳар барнома. console.log, Math.round, Number — ҳамаи инҳо функсияҳое мебошанд, ки барои шумо навиштаанд. Акнун функсияҳои худро менависем.

Эълон ва даъват

function sayHi() {
  console.log("Салом!");
}

sayHi();
sayHi();

Натиҷа:

Салом!
Салом!

Калимаи function, ном, қавсҳои доиравӣ ва тан дар қавсҳои фигурӣ — ин эълон аст. Худ аз худ он ҳеҷ чизро иҷро намекунад. Коди дохилӣ танҳо ҳангоми даъват оғоз меёбад: ном ва қавсҳо sayHi().

Параметрҳо ва аргументҳо

Барои он ки функсия бо додаҳои гуногун кор кунад, ба он параметрҳо медиҳанд — тағйирёбандаҳо дар қавсҳои эълон:

function greet(name, age) {
  console.log(`Салом, ${name}! Ту ${age}-сола.`);
}

greet("Аня", 15);
greet("Тимур", 17);

Натиҷа:

Салом, Аня! Ту 15-сола.
Салом, Тимур! Ту 17-сола.

name ва age — параметрҳо (номҳо дар эълон). "Аня" ва 15 — аргументҳо (қиматҳо ҳангоми даъват). Ҳангоми даъват аргументҳо бо тартиб ба параметрҳо гузошта мешаванд.

Агар аргумент дода нашавад, параметр undefined мешавад. Барои пешгирии ин қимати пешфарз медиҳанд:

function greet(name = "меҳмон") {
  console.log(`Салом, ${name}!`);
}
greet();
greet("Ира");

Натиҷа:

Салом, меҳмон!
Салом, Ира!

return — баргардондани натиҷа

console.log дар дохили функсия қиматро танҳо нишон медиҳад. Барои он ки натиҷаро минбаъд истифода бурдан мумкин бошад — ҷамъ кардан, муқоиса кардан, ба функсияи дигар додан, — онро баргардондан лозим аст:

function square(n) {
  return n * n;
}

const a = square(3);
console.log(a + square(4));

Натиҷа:

25

return функсияро фавран анҷом медиҳад: коди баъд аз он иҷро намешавад. Функсия бе return undefined бармегардонад.

Функсияҳо функсияҳоро даъват мекунанд

Масъалаи калонро ба функсияҳои хурд тақсим кардан қулай аст:

function priceWithTax(price) {
  return price * 1.2;
}

function cartTotal(a, b) {
  return priceWithTax(a) + priceWithTax(b);
}

console.log(cartTotal(100, 50));

Натиҷа:

180

Функсияи хуб як кор мекунад, ва номи он — феълест, ки ин корро тасвир мекунад: getPrice, isValid, formatDate, showMessage.

Доираи намоёнӣ

Тағйирёбандае, ки дар дохили функсия сохта шудааст, танҳо дар дохили он намоён аст:

function test() {
  const secret = 42;
  console.log(secret);
}
test();
console.log(typeof secret);

Натиҷа:

42
undefined

Берун secret вуҷуд надорад. Ин хуб аст: функсияҳо ба ҳамдигар халал намерасонанд, ҳатто агар дар дохил тағйирёбандаҳои ҳамном дошта бошанд. Аммо тағйирёбандаҳои берунаро функсия дида метавонад:

const rate = 0.1;
function bonus(salary) {
  return salary * rate;  // rate аз коди беруна гирифта мешавад
}
console.log(bonus(5000));

Натиҷа:

500

Қавсҳои фигурии if, for ва ҳар гуна {} низ барои let ва const доираи худро месозанд.

Дар дохил чӣ гуна кор мекунад

Ҳангоми ҳар даъват муҳаррик барои функсия «утоқ»-и нав месозад — маҷмӯи тағйирёбандаҳои маҳаллӣ ва параметрҳои он — ва дар хотир нигоҳ медорад, ки ба куҷо баргардад. Вақте ки функсия ба return (ё ба охир) мерасад, утоқ тоза мешавад, ва натиҷа ба ҷойи даъват гузошта мешавад: square(3) + 1 ба 9 + 1 табдил меёбад.

Функсияҳое, ки бо function name() {} эълон шудаанд, ҳатто болотар аз ҷойи навишташуда даъват карда мешаванд: муҳаррик ҳамаи чунин эълонҳоро пешакӣ меёбад. Инро боло баромадан (hoisting) меноманд.

Хатоҳои маъмул

  1. console.log ба ҷойи return. Функсия натиҷаро чоп мекунад, аммо undefined бармегардонад. Санҷиш қимати баргардондашуда-ро муқоиса мекунад.
  2. Қавсҳо ҳангоми даъват фаромӯш шуданд. sayHi бе () — худи функсия аст, на даъвати он.
  3. Аргументҳо на бо он тартиб. clamp(0, 10, 5) ба ҷойи clamp(5, 0, 10) — параметрҳо бо тартиб гирифта мешаванд.
  4. Код баъд аз return. Он ҳеҷ гоҳ иҷро намешавад.
  5. Тағйирёбандаи маҳаллиро берун истифода мебаранд. Тағйирёбанда аз функсия берун намоён нест — онро бо return баргардонед.

Ёддошт

Чӣ Чӣ тавр
Эълон кардан function name(a, b) { … }
Даъват кардан name(1, 2)
Баргардондани натиҷа return a + b;
Пешфарз function f(x = 10) { … }
Бе return undefined бармегардонад
Тағйирёбандаҳои маҳаллӣ танҳо дар дохили функсия намоёнанд

Саломдиҳӣ

Осон+10 XP

Функсияи greet(name)-ро нависед, ки сатри Hello, <ном>!-ро бармегардонад. Агар ном дода нашавад, функсия бояд Hello, friend!-ро баргардонад.

greet("Anna")  → "Hello, Anna!"
greet()        → "Hello, friend!"

Барои ҳал кардани масъалаҳо коннекторро пайваст кун

Коди масъалаҳо дар компютери худат иҷро мешавад — ин аз браузер тезтар ва боэътимодтар аст. Барои ин барномаи ройгони коннектори CodeWithMe лозим аст. Онро як бор пайваст кардан кифоя аст.

Коннекторро дар ин компютер ҷустуҷӯ мекунем…

  1. 1
    Коннекторро барои системаи худ (Windows, macOS ё Linux) зеркашӣ кун.Зеркашии коннекторДар саҳифаи зеркашӣ файлеро интихоб кун, ки дар номаш системаи ту ҳаст, масалан windows-amd64.
  2. 2Онро иҷро кун ва ҷузвдонеро интихоб кун, ки ҳалҳоят дар он ҷо меистанд. Python ва Node.js-ро ӯ худаш ҳангоми зарурат ба он ҷо мегузорад.
  3. 3
    Дар поён рамзи 6-рақамаро ворид кун — он дар равзанаи коннектор навишта шудааст («Рамз барои сайти CodeWithMe»). Агар браузер дар бораи дастрасӣ ба шабакаи маҳаллӣ пурсад — иҷозат деҳ.

Коннектор кушода аст (рамзи манбаъ дар GitHub), танҳо дар компютери ту кор мекунад ва кодро танҳо пас аз ворид кардани рамзи пайвастшавӣ иҷро мекунад.