JavaScript Functions తెలుగులో | function, parameters, return
☕ చాయ్ తయారీ విధానం (Recipe) మరియు Functions
ఇంట్లో చాయ్ తయారు చేయడానికి ఒక విధానం (recipe) ఉంటుంది: నీళ్లు మరిగించు, పాలు, చక్కెర, టీ పొడి వేయి, వడకట్టు. ప్రతిసారీ ఈ విధానాన్ని మళ్ళీ మళ్ళీ రాయరు కదా? "చాయ్ చెయ్యి" అని చెబితే చాలు, ఆ విధానం అంతా జరిగిపోతుంది. ఇంకా, ఎంతమందికి కావాలో (ingredients) మార్చి చెబితే, అదే విధానంతో ఎన్ని కప్పులైనా తయారవుతాయి.
Programming లో ఇలా ఒక పనికి సంబంధించిన code ని ఒక పేరు పెట్టి, ఎన్ని సార్లైనా వాడుకునే ఏర్పాటునే Function అంటారు. ఒకే code ని 10 చోట్ల కాపీ చేసి రాయాల్సిన అవసరం లేదు. ఒక్కసారి function గా రాసి, పేరు చెప్పి వాడుకుంటే చాలు (దీనినే DRY — Don't Repeat Yourself ప్రిన్సిపల్ అంటారు).
ఇప్పటికే మీరు functions ని వాడుతున్నారు: console.log(), Number(), parseInt() ఇవన్నీ JavaScript అందించే ఇన్-బిల్ట్ functions. ఈ chapter లో మీ సొంత functions రాయడం నేర్చుకుందాం.
- Function అంటే ఏమిటి, ఎందుకు కావాలి?
- Function ని declare చేయడం మరియు call చేయడం
- Parameters మరియు arguments మధ్య ఉన్న తేడా
returnతో విలువను తిరిగి ఇవ్వడం & return తో function ఆగిపోవడం- Default parameters (డిఫాల్ట్ విలువలు)
- Function expression మరియు Hoisting (ముందే వాడగలమా?)
- Function లోపలి variables (Scope కి చిన్న పరిచయం)
- Beginners చేసే 6 సాధారణ తప్పులు (Real Node.js error outputs తో)
- సమగ్ర ప్రాక్టీస్ ప్రశ్నలు & సమాధానాలు
- 🧠 ఇంటరాక్టివ్ క్విజ్ (Interactive Telugu Quiz)
ఒకే message ని చాలా చోట్ల print చేయాలనుకోండి. Function లేకపోతే ప్రతిచోటా అదే code రాయాలి. Function తో:
function greet() {
console.log("నమస్కారం!");
}
greet();
greet();
నమస్కారం!
నమస్కారం!
Code పరిశీలన: ఒక్కసారి రాశాం, రెండుసార్లు వాడాం. రేపు message మార్చాలంటే ఒక్క చోట మార్చితే చాలు, అన్ని చోట్లా మారిపోతుంది. ఇదే function శక్తి!
Function syntax చాలా సూటిగా ఉంటుంది:
function functionName(parameters) {
// function body: చేయాల్సిన పని
}
Function వాడకంలో రెండు ప్రధాన దశలు ఉంటాయి:
- 1. Declare (నిర్వచించడం): Function ని తయారు చేయడం. ఇది చాయ్ తయారీ విధానాన్ని పుస్తకంలో రాసి పెట్టడం లాంటిది. ఈ దశలో లోపల ఉన్న code అసలు run అవ్వదు.
- 2. Call (పిలవడం / Invoke): Function పేరు తర్వాత
()రాసి పిలిస్తే, అప్పుడు మాత్రమే అందులోని code run అవుతుంది.
పై ఉదాహరణలో:
• function greet() { ... } ← declare చేశాం (చాయ్ విధానం రాశాం).
• greet(); ← call చేశాం (చాయ్ చెయ్యి అన్నాం). రెండుసార్లు call చేశాం కాబట్టి రెండుసార్లు run అయ్యింది.
Function పేర్లు ఎలా పెట్టాలి?
Variables కి వర్తించే నియమాలే functions కి కూడా వర్తిస్తాయి (Chapter 3). అదనంగా:
- camelCase వాడండి:
calculateTotal,isEven. - Function ఒక పని చేస్తుంది కాబట్టి, పేరు సాధారణంగా క్రియ (verb) తో మొదలవ్వాలి:
greet,getPrice,calculateTax. trueలేదాfalseఇచ్చే functions కి is లేదా has తో మొదలుపెట్టడం మంచి సంప్రదాయం:isEven,hasTicket.
Function ప్రతిసారీ ఒకే పని చేస్తే ప్రయోజనం తక్కువ. చాయ్ లో "ఎన్ని కప్పులు?" అని మార్చినట్లు, function కి విలువలు పంపించి, వాటిని బట్టి వేర్వేరు ఫలితాలు రాబట్టొచ్చు.
function greetUser(name) {
console.log(`నమస్కారం ${name}!`);
}
greetUser("రవి");
greetUser("సీత");
నమస్కారం రవి!
నమస్కారం సీత!
Parameters vs Arguments
ఈ రెండు పదాలు విద్యార్థులను తరచూ గందరగోళానికి గురిచేస్తాయి. తేడా చాలా సులభం:
| పదం (Term) | అర్థం (Meaning) | ఉదాహరణలో |
|---|---|---|
| Parameter | Function ని declare చేసేటప్పుడు ( ) లో రాసే పేరు. ఇది ఒక ఖాళీ డబ్బా లాంటిది. |
name (function greetUser(name) లో) |
| Argument | Function ని call చేసేటప్పుడు పంపే నిజమైన విలువ. | "రవి", "సీత" (greetUser("రవి") లో) |
greetUser("రవి") అన్నప్పుడు, "రవి" అనే argument, name అనే parameter డబ్బాలో కూర్చుంటుంది. Function లోపల name ని మామూలు variable లాగా వాడొచ్చు.
ఇప్పటివరకు functions కేవలం screen మీద print చేశాయి. కానీ చాలాసార్లు function ఒక ఫలితాన్ని తిరిగి ఇవ్వాలి, దాన్ని మనం వేరే చోట వాడుకోవడానికి. దానికి return వాడతాం. చాయ్ విధానం చివర తయారైన చాయ్ ని మన చేతికి ఇవ్వడం లాంటిది.
function add(a, b) {
return a + b;
}
const sum = add(10, 20);
console.log(sum);
console.log(add(5, 7));
30
12
Code అర్థం చేసుకుందాం:
add(a, b)కి రెండు parameters ఉన్నాయి. కామాతో వేరు చేసి ఎన్నైనా రాయొచ్చు.return a + b;అంటే "a + b విలువను తిరిగి ఇవ్వు".add(10, 20)అని call చేస్తే, ఆ expression స్థానంలో30వచ్చి కూర్చుంటుంది. అందుకేconst sum = add(10, 20)అంటేconst sum = 30.- తిరిగి వచ్చిన విలువను variable లో దాచొచ్చు (
sum), నేరుగా print చేయొచ్చు (console.log(add(5, 7))), లేదా మరో లెక్కలో వాడొచ్చు.
return తో function ఆగిపోతుంది
return కనిపించగానే function అక్కడితో ముగుస్తుంది. దాని కింద ఉన్న code ఏదీ run అవ్వదు.
function test() {
console.log("A");
return;
console.log("B");
}
test();
A
"B" రాలేదు, ఎందుకంటే return తర్వాత ఉన్న code ఎప్పటికీ run అవ్వదు (దీనినే Unreachable Code అంటారు).
ఈ లక్షణాన్ని if తో కలిపి వాడటం (Early Return Pattern):
function check(n) {
if (n > 0) {
return "positive";
}
return "not positive";
}
console.log(check(5));
console.log(check(-2));
positive
not positive
n = 5 అయితే మొదటి return తో function ముగుస్తుంది, రెండో return వరకు రాదు. else రాయాల్సిన అవసరం కూడా లేకుండా పోయింది!
Return లేని function
return రాయని function ఫలితంగా undefined ఇస్తుంది.
function sayHi() {
console.log("Hi");
}
const r = sayHi();
console.log(r);
Hi
undefined
sayHi() screen మీద "Hi" print చేసింది (అది దాని పని), కానీ తిరిగి ఇవ్వడానికి ఏమీ లేదు, అందుకే r లో undefined ఉంది.
కొత్తవారికి ఇది పెద్ద గందరగోళం. తేడా ఇది:
• console.log: మనకు (developer కి) screen మీద చూపిస్తుంది. ఆ విలువను program లో మళ్ళీ వాడుకోలేం.
• return: విలువను program కి తిరిగి ఇస్తుంది. దాన్ని variable లో దాచొచ్చు, ఇతర గణనలకు (calculations) వాడొచ్చు.
సాధారణంగా లెక్కలు చేసే functions return చేయాలి, print చేయడం వేరే చోట చూసుకోవాలి.
ఉదాహరణ 1: సరి సంఖ్యా కాదా? (isEven)
function isEven(n) {
return n % 2 === 0;
}
console.log(isEven(10));
console.log(isEven(7));
true
false
n % 2 === 0 అనేది ఇప్పటికే true లేదా false ఇస్తుంది. దాన్ని నేరుగా return చేసేశాం!
ఉదాహరణ 2: GST తో కలిపిన మొత్తం (calculateTotal)
function calculateTotal(price, gstPercent) {
const gst = price * gstPercent / 100;
return price + gst;
}
console.log(calculateTotal(1000, 18));
1180
₹1000 కి 18% GST = ₹180. కలిపి ₹1180. వేరే ధర, వేరే GST తో ఎన్ని సార్లైనా ఇదే function ని వాడొచ్చు.
ఉదాహరణ 3: ఒక function నుంచి ఇంకో function ని పిలవడం (Modularity)
function square(n) {
return n * n;
}
function sumOfSquares(a, b) {
return square(a) + square(b);
}
console.log(sumOfSquares(3, 4));
25
square(3) = 9, square(4) = 16, కలిపి 25. పెద్ద పనిని చిన్న చిన్న functions గా విడగొట్టడం ఒక గొప్ప సాఫ్ట్వేర్ ఇంజనీరింగ్ అలవాటు. ప్రతి function ఒక్క పనిని మాత్రమే పరిపూర్ణంగా చేయాలి!
Argument ఇవ్వకపోతే ఒక డిఫాల్ట్ విలువ వాడాలనుకుంటే, parameter పక్కన = తో రాస్తాం:
function greet(name = "అతిథి") {
console.log(`నమస్కారం ${name}!`);
}
greet();
greet("రవి");
నమస్కారం అతిథి!
నమస్కారం రవి!
greet() లో argument ఇవ్వలేదు కాబట్టి name లో డిఫాల్ట్ విలువ అయిన "అతిథి" వచ్చింది. greet("రవి") లో ఇచ్చిన విలువను ప్రాధాన్యతతో వాడింది.
ఇప్పటివరకు మనం రాసినది function declaration (function పేరు() {}). ఇంకో పద్ధతి function expression: function ని ఒక variable లో దాచడం.
const multiply = function (a, b) {
return a * b;
};
console.log(multiply(4, 5));
20
ఇక్కడ function కి పేరు లేదు (Anonymous Function). అది multiply అనే variable లో కూర్చుంది, ఆ variable పేరుతోనే call చేస్తున్నాం. చివరలో ; ఉందని గమనించండి (ఎందుకంటే ఇది ఒక variable assignment). Chapter 13 లో దీనికే చిన్న ఆధునిక రూపమైన Arrow Functions నేర్చుకుంటాం.
Hoisting: ముందే వాడగలిగేది
Function declaration ని, దాన్ని రాసిన చోటుకి ముందే call చేయొచ్చు. JavaScript code ని run చేసే ముందు declarations ని పైకి "ఎత్తి" పెడుతుంది. దీన్నే hoisting అంటారు.
console.log(square(4));
function square(n) {
return n * n;
}
16
కానీ function expression తో ఇది పని చేయదు:
console.log(cube(3));
const cube = function (n) {
return n ** 3;
};
ReferenceError: Cannot access 'cube' before initialization
కాబట్టి function expression ని ఎప్పుడూ వాడటానికి ముందే రాయండి. Hoisting గురించి Chapter 24 లో మరింత వివరంగా నేర్చుకుందాం.
Function లోపల declare చేసిన variables, ఆ function లోపల మాత్రమే కనిపిస్తాయి. బయట వాడలేం.
function f() {
const secret = 10;
}
f();
console.log(secret);
ReferenceError: secret is not defined
ఇది ఒక ఇంటి లోపల ఉన్న వస్తువులు ఇంటి బయట రోడ్డు మీద నుంచి కనిపించనట్లు. దీన్నే scope అంటారు. Chapter 24 లో వివరంగా తెలుసుకుందాం. ఇప్పటికి "function లోపలి variable బయటకు కనిపించదు" అని గుర్తుంచుకోండి. కావాల్సిన విలువను return తో బయటకు పంపండి.
1. return రాయడం మర్చిపోవడం:
function add(a, b) {
a + b;
}
console.log(add(2, 3));
5 రావాలి, కానీ undefined వచ్చింది. a + b ని లెక్కించింది, కానీ ఎక్కడికీ తిరిగి ఇవ్వలేదు. return a + b; అని రాయాలి.
2. Function ని () లేకుండా రాయడం:
function greet() {
console.log("నమస్కారం!");
}
greet;
ఇది ఏమీ చేయదు. greet అని మాత్రమే రాస్తే function ని "చూస్తుంది", కానీ పిలవదు (call చేయదు). typeof greet అడిగితే "function" అని వస్తుంది. పిలవాలంటే greet(); అని కుండలీకరణాలు తప్పనిసరి!
3. Function expression ని declare చేయకముందే వాడటం:
పైన చూసినట్లు ReferenceError: Cannot access 'cube' before initialization వస్తుంది. Expression ని ఎల్లప్పుడూ వాడటానికి ముందు రాయండి.
4. Arguments సంఖ్య తప్పుగా ఇవ్వడం:
function add(a, b) {
return a + b;
}
console.log(add(5));
console.log(add(5, 10, 20));
NaN
15
add(5) లో b కి ఏ విలువా రాలేదు, కాబట్టి b ఒక undefined. 5 + undefined అంటే NaN.
add(5, 10, 20) లో అదనంగా ఇచ్చిన 20 ని ఏ parameter తీసుకోలేదు, కాబట్టి పట్టించుకోకుండా వదిలేసింది (error ఇవ్వదు).
5. Arguments క్రమం తప్పుగా ఇవ్వడం:
function subtract(a, b) {
return a - b;
}
console.log(subtract(3, 10));
console.log(subtract(10, 3));
-7
7
Arguments ని parameters వరుస క్రమంలోనే (మొదటిది మొదటి దానికి, రెండోది రెండో దానికి) ఇస్తుంది. క్రమం మారితే ఫలితం తారుమారవుతుంది.
6. return తర్వాత code రాయడం:
return తర్వాత ఉన్న code ఎప్పటికీ run అవ్వదు (పైన test() ఉదాహరణ చూశాం). అది పొరపాటున ఉంటే మనకు తెలియకుండా డెడ్ కోడ్ గా మిగిలిపోతుంది.
- వృత్తం వ్యాసార్థం (radius) ఇస్తే దాని వైశాల్యం ఇచ్చే function రాయండి. (వైశాల్యం = π × r × r.
Math.PIవాడండి.) radius 5 తో call చేయండి. - రెండు సంఖ్యల్లో పెద్దదాన్ని return చేసే
maxOfTwofunction రాయండి. (15, 42 తో test చేయండి) - ఒక సంఖ్య palindrome అవునా కాదా (ముందునుంచి, వెనుకనుంచి ఒకేలా ఉండే సంఖ్య, ఉదా: 121) చెప్పే function రాయండి. 121 మరియు 123 తో test చేయండి.
- మార్కులు ఇస్తే "Pass" (35 లేదా ఎక్కువ) లేదా "Fail" return చేసే function రాయండి. (72, 20 తో test చేయండి)
- Celsius ని Fahrenheit గా మార్చే function రాయండి. (F = C × 9 / 5 + 32) 100 మరియు 0 తో test చేయండి.
👉 సమాధానాలు చూడండి
1. వృత్తం వైశాల్యం:
function circleArea(radius) {
return Math.PI * radius * radius;
}
console.log(circleArea(5));
2. పెద్ద సంఖ్య (maxOfTwo):
function maxOfTwo(a, b) {
if (a > b) {
return a;
}
return b;
}
console.log(maxOfTwo(15, 42));
3. Palindrome సంఖ్య:
function isPalindrome(num) {
let original = num;
let reversed = 0;
while (num > 0) {
const last = num % 10;
reversed = reversed * 10 + last;
num = (num - last) / 10;
}
return original === reversed;
}
console.log(isPalindrome(121));
console.log(isPalindrome(123));
true
false
(సంఖ్య యొక్క అంకెలను వెనుకనుంచి తిరగేసి (reversed) అసలు సంఖ్యతో పోల్చాం. 121 తిరగేస్తే 121, 123 తిరగేస్తే 321.)
4. Pass లేదా Fail:
function result(marks) {
if (marks >= 35) {
return "Pass";
}
return "Fail";
}
console.log(result(72));
console.log(result(20));
Pass
Fail
5. Celsius to Fahrenheit:
function toFahrenheit(c) {
return c * 9 / 5 + 32;
}
console.log(toFahrenheit(100));
console.log(toFahrenheit(0));
212
32
ఈ code ని మన compiler లో run చేయండి. ఒక షాప్ బిల్లు function ఇది, GST % ఇవ్వకపోతే 18% అనుకుంటుంది. విలువలు మార్చి ఫలితాలు చూడండి:
function billAmount(price, qty, gstPercent = 18) {
const subtotal = price * qty;
return subtotal + subtotal * gstPercent / 100;
}
console.log(billAmount(250, 3));
console.log(billAmount(250, 3, 5));
885
787.5
మొదటి call లో GST ఇవ్వలేదు (18% వాడింది), రెండో call లో 5% ఇచ్చాం.
👉 Our Compiler లో JavaScript try చేయండి📌 సారాంశం (Quick Summary):
- Function అంటే: ఒక పనికి సంబంధించిన code ని పేరు పెట్టి, ఎన్ని సార్లైనా పునర్వినియోగించుకునే (reuse) ఏర్పాటు.
- Declare:
function పేరు(parameters) { ... }. Call:పేరు(arguments);(కుండలీకరణాలు తప్పనిసరి). - Parameter = declare చేసేటప్పుడు రాసే ఖాళీ డబ్బా పేరు. Argument = call చేసేటప్పుడు పంపే అసలైన విలువ.
return: విలువను తిరిగి ఇస్తుంది మరియు function ని అక్కడే ముగిస్తుంది. return లేకపోతేundefinedవస్తుంది.console.logvsreturn:console.logకేవలం చూపిస్తుంది,returnలెక్కల కోసం ప్రోగ్రామ్ కి తిరిగి ఇస్తుంది. రెండూ వేరు!- Default parameter:
function f(name = "అతిథి")— argument ఇవ్వకపోతే డిఫాల్ట్ విలువను వాడుకుంటుంది. - Hoisting: Function declaration ని ముందే call చేయొచ్చు (Hoisting). కానీ function expression ని ముందే call చేస్తే
ReferenceErrorవస్తుంది. - Local Scope: Function లోపలి variables బయటకు కనిపించవు.
- ప్రతి function ఒక్క పని మాత్రమే బాగా చేయాలి. Function పేరు సాధారణంగా క్రియ (verb) తో మొదలవ్వాలి.
👉 తర్వాతి పాఠం: Arrow Functions →
ఇప్పటివరకు మనం సాంప్రదాయ function కీవర్డ్ తో functions రాశాం. తర్వాతి పాఠంలో ఆధునిక JavaScript (ES6+) లో functions ని అత్యంత చిన్నగా, సొగసైన పద్ధతిలో రాసే Arrow Functions (=>) గురించి నేర్చుకుందాం!