პროგრამირების საფუძვლები › დამწყები › ფუნქციები
პარამეტრები და არგუმენტები
ეს თავი CodeQuest Pro-ს ნაწილია
Pro ხსნის სკოლის ყველა კურსს და თამაშის ყველა ლეველს, ვიდეოს და პროექტს. ერთჯერადი გადახდა, გამოწერის გარეშე.
რას ისწავლი
- როგორ გადასცე ფუნქციას მონაცემი პარამეტრით
- რით განსხვავდება პარამეტრი (parameter) არგუმენტისგან (argument)
- რა ხდება, როცა არგუმენტი აკლია ან ზედმეტია
ფუნქცია, რომელიც ყოველ ჯერზე სხვაგვარად მუშაობს
წინა თავის greet ყოველთვის ერთსა და იმავეს ბეჭდავდა. ნამდვილ პროგრამაში კი ყველას თავისი სახელით მივესალმებით. ამისთვის ფუნქციას მონაცემი უნდა გადავცეთ:
function greet(name) {
console.log("გამარჯობა, " + name + "!");
}
greet("ანა");
greet("ლუკა");იბეჭდება გამარჯობა, ანა! და გამარჯობა, ლუკა!. ფრჩხილებში ჩაწერილი name არის პარამეტრი (parameter): ცვლადი, რომელიც მხოლოდ ფუნქციის შიგნით არსებობს და გამოძახებისას მნიშვნელობას იღებს. გამოძახებისას ფრჩხილებში ჩაწერილი "ანა" კი არგუმენტია (argument): კონკრეტული მნიშვნელობა, რომელიც პარამეტრში ჩაიდება.
მოკლედ: პარამეტრი ცარიელი ყუთია ფუნქციის განსაზღვრაში, არგუმენტი ის, რასაც გამოძახებისას ყუთში დებ.
რამდენიმე პარამეტრი
პარამეტრი რამდენიც გინდა, იმდენი შეიძლება იყოს, მძიმით გამოყოფილი:
function introduce(name, age) {
console.log(`მე ვარ ${name}, ${age} წლის.`);
}
introduce("ნინო", 12);
introduce("გიო", 13);არგუმენტები პარამეტრებს რიგის მიხედვით უსადაგდება: პირველი არგუმენტი პირველ პარამეტრში ჩაიდება, მეორე მეორეში. სახელს აქ მნიშვნელობა არ აქვს. თუ დაწერ introduce(12, "ნინო"), დაიბეჭდება „მე ვარ 12, ნინო წლის.“ კომპიუტერი შენს ჩანაფიქრს ვერ გამოიცნობს.
პარამეტრი ციკლში
პარამეტრი ჩვეულებრივი ცვლადია, ამიტომ შეგიძლია ის ციკლში, პირობაში ან გამოთვლაში გამოიყენო:
function stars(count) {
let line = "";
for (let i = 1; i <= count; i++) {
line += "*";
}
console.log(line);
}
stars(3);
stars(7);ერთი ფუნქცია ახლა ნებისმიერი სიგრძის ხაზს ხატავს. ეს არის პარამეტრების მთავარი ძალა: ერთი წესი, ბევრი სხვადასხვა შედეგი.
არგუმენტად შეგიძლია გადასცე არა მხოლოდ რიცხვი ან ტექსტი, არამედ ცვლადიც და გამოსახულებაც: stars(level) ან stars(level * 2). კომპიუტერი ჯერ არგუმენტს ითვლის და ფუნქციას უკვე მზა მნიშვნელობას გადასცემს. პარამეტრის სახელი და გადაცემული ცვლადის სახელი ერთმანეთს არ უნდა ემთხვეოდეს: ფუნქციამ არ იცის და არც აინტერესებს, რა ერქვა ცვლადს გარეთ.
როცა არგუმენტი აკლია ან ზედმეტია
JavaScript გამოძახებისას არგუმენტების რაოდენობას არ ამოწმებს:
- აკლია: პარამეტრი იღებს სპეციალურ მნიშვნელობას
undefined, „განუსაზღვრელი“.greet()დაბეჭდავსგამარჯობა, undefined!. - ზედმეტია: დამატებითი არგუმენტები უბრალოდ იგნორირდება.
greet("ანა", "ლუკა")მხოლოდ ანას მიესალმება.
თუ ეკრანზე მოულოდნელად undefined გამოჩნდა, ჯერ შეამოწმე, ყველა არგუმენტი გადაეცი თუ არა ფუნქციას.
სცადე თავად
გაუშვი, მერე დაამატე მესამე პარამეტრი city და დაბეჭდე ისიც.
ხშირი შეცდომები
- არეული რიგი. არგუმენტები პარამეტრებს რიგით უსადაგდება. თუ ფუნქცია
(name, age)-ს ელოდება, ჯერ სახელი გადაეცი. - ბრჭყალები პარამეტრის სახელზე.
function greet("name")შეცდომაა. პარამეტრი ცვლადის სახელია და ბრჭყალების გარეშე იწერება. ბრჭყალები გამოძახებისას, ტექსტურ არგუმენტზე გჭირდება. - პარამეტრის გამოყენება ფუნქციის გარეთ.
nameმხოლოდgreet-ის შიგნით არსებობს. გარეთ ისReferenceError-ს გამოიწვევს.
სავარჯიშო
დაწერე ფუნქცია printTable(number), რომელიც გადაცემული რიცხვის გამრავლების ტაბულას ბეჭდავს 1-დან 5-მდე, მაგალითად 3 x 1 = 3. გამოიძახე printTable(3) და printTable(8).
💡 მინიშნება
ფუნქციის შიგნით დაწერე for ციკლი 1-დან 5-მდე. შაბლონურ სტრიქონში ჩასვი ${number}, ${i} და ${number * i}.
✅ ამოხსნის ნახვა
function printTable(number) {
for (let i = 1; i <= 5; i++) {
console.log(`${number} x ${i} = ${number * i}`);
}
}
printTable(3);
printTable(8);მინი-ქვიზი
1function add(a, b)-ში რა არის a და b?
განსაზღვრაში ჩაწერილი სახელები პარამეტრებია. გამოძახებისას გადაცემული მნიშვნელობები არგუმენტებია.
2რას დაბეჭდავს greet(), თუ function greet(name) { console.log("გამარჯობა, " + name); }?
არგუმენტი არ გადაეცა, ამიტომ name არის undefined.
3function show(a, b) { console.log(a); }. რას დაბეჭდავს show(5, 9)?
პირველი არგუმენტი პირველ პარამეტრში, a-ში ჩაიდება.
შეჯამება
- პარამეტრი ფუნქციის ფრჩხილებში ჩაწერილი ცვლადია, არგუმენტი გამოძახებისას გადაცემული მნიშვნელობა.
- არგუმენტები პარამეტრებს რიგით უსადაგდება.
- არგუმენტი რომ აკლდეს, პარამეტრი
undefined-ია. ზედმეტი არგუმენტი იგნორირდება. - პარამეტრი მხოლოდ ფუნქციის შიგნით არსებობს.