
הגדרת קבועים בג'אווה סקריפט
קבועים הם מזהים שהערכים שלהם נשארים קבועים ולא ניתן לשנות אותם לאחר הקצאתם. הם משמשים לאחסון ערכים שנועדו להישאר קבועים לאורך כל ביצוע התוכנית.
השימוש בקבועים נועד לייצוג ערכים שלא אמורים להשתנות במהלך הפעלת התוכנית, כגון קבועים מתמטיים, הגדרות תצורה או ערכי נתונים קבועים.
ב-JavaScript, קבועים מוכרזים באמצעות מילת המפתח const ואחריה שם המזהה והערך שיוקצו.
דוגמה:
const PI = 3.14;
במקומות בקוד שיש בהם ערכים שאינם משתנים, נמליץ להשתמש בקבועים במקום הערכים עצמם, כדי לשפר את בהירות הקוד ולמנוע שינוי מקרי.
אם לדוגמה החלטנו שתהליך מסויים יבוצע 7 פעמים, והקוד שלנו מלא במספר 7 באזכורים שונים (7 פעמים לכתוב משהו על המסך, 7 חזרות בביצוע לולאה וכו'), אז נעדיף ליצור קבוע בשם NUM_EXECUTIONS עם הערך 7 ולהשתמש בו.
השימוש בקבועים במקום בערך עצמו משפר את בהירות הקוד ומונע שינוי מקרי בטעות. יתרה מכך, הוא גם מאפשר תחזוקה טובה לקוד בעתיד. בדוגמה שלנו, אם למשל נחליט בעתיד שמספר הפעמים שיבוצע התהליך יהיה 8 במקום 7, נוכל לשנות זאת במקום אחד בלבד בקוד ולא בעשרות מקומות, דבר שיחסוך מאיתנו זמן וימנע טעויות.
הגדרת משתנים בג'אווה סקריפט
משתנים הם מזהים המשמשים לאחסון ולמניפולציה של ערכי נתונים בתוכנית. שלא כמו קבועים, למשתנים ניתן להקצות מחדש ערכים שונים במהלך ביצוע התוכנית.
השימוש במשתנים נועד לייצוג ערכים שעשויים להשתנות במהלך ביצוע התוכנית, כגון קלט משתמש, מוני לולאה או תוצאות חישובי ביניים.
ב-JavaScript, משתנים מוכרזים באמצעות המילה השמורה let או var ואחריה שם המזהה. ניתן להקצות ערך למשתנה כחלק מההכרזה עליו.
דוגמה:
let str;
let count = 0;
var username;
var message = "Hello, World!";
טיפים לשימוש נכון במשתנים:
- הצהר על משתנים קרוב למקום שבו הם משמשים, כדי לשפר את בהירות הקוד ותחזוקה.
- אתחל משתנים עם ערכי ברירת מחדל מתאימים, כדי למנוע שימוש שגוי בערכים לא מוגדרים.
- במידת האפשר הימנע משימוש במשתנים גלובליים המשפיעים על קטעי קוד נרחבים, כדי למנוע באגים פוטנציאליים.
ההבדלים בין let ו-var בהכרזה על משתנים
המילים השמורות let ו-var משמשות שתיהן להגדרת משתנים ב-JavaScript. ההבדל המרכזי ביניהן הוא ה-Scope (תחום) בו מוגדר המשתנה.
משתנים המוכרזים עם var הם ב-Scope של הפונקציה או ב-Scope גלובלי. המשמעות היא שמשתני var נגישים לאורך כל הפונקציה שבה הם מוכרזים, גם אם הם מוכרזים בתוך בלוק (כמו משפט תנאי if או לולאה).
משתנים המוכרזים עם let הם ב-Scope של הבלוק. המשמעות היא שמשתני let נגישים רק בתוך הבלוק שבו הם מוכרזים.
דוגמה:
function exampleFunction() {
if (true) {
var varVariable = "Var Variable"; // Function-scoped
let letVariable = "Let Variable"; // Block-scoped
}
console.log(varVariable); // Output: Var Variable
console.log(letVariable); // Error: ReferenceError: letVariable is not defined
}
בדוגמה זו, המשתנה letVariable מוכרז בתוך הבלוק if, ולכן אינו מוגדר מחוץ לבלוק הזה. נסיון לקרוא למשתנה זה מחוץ לבלוק מחזיר שגיאת ReferenceError.
במקרה שמשתנה מוכרז עם var באמצע Scope כלשהו (נניח פונקציה), מבוצע Hoisting (הרמה) ומתייחסים אליו כאילו ההכרזה היא בתחילת ה-Scope. לכן, ניתן לפנות למשתנה גם בתוך ה-Scope גם לפני המיקום בו מבוצעת ההכרזה עליו, דבר שמוביל לשימוש בערך שאינו מוגדר.
לעומת זאת, פניה למשתנה המוכרז עם let לפני המיקום בו מבוצעת ההכרזה עליו תחזיר שגיאת ReferenceError.
דוגמה:
console.log(varVariable); // Output: undefined
var varVariable = "Var Variable";
console.log(letVariable); // Error: ReferenceError: Cannot access 'letVariable' before initialization
let letVariable = "Let Variable";
ניתן להכריז מחדש על משתנים המוכרזים עם var באותו Scope. עם זאת, הדבר מהווה פוטנציאל להתנהגות בלתי צפויה ולבאגים.
לעומת זאת, לא ניתן להכריז מחדש על משתנים שהוכרזו עם let באותו הבלוק. ניסיון להכריז מחדש על משתנה let באותו הבלוק יגרום לשגיאת SyntaxError.
דוגמה:
var varVariable = "Var Variable";
var varVariable = "New Var Variable"; // No error
let letVariable = "Let Variable";
let letVariable = "New Let Variable"; // Error: SyntaxError: Identifier 'letVariable' has already been declared
טיפים לבחירה נכונה של סוג ההכרזה:
- let מועדף בדרך כלל על var בשל התנהגות ה-Block-Scoping שלו, המסייעת במניעת Hoisting מקרי של משתנים ובעיות הכרזה מחדש.
- השתמש ב-let כאשר צריך משתנים ב-Scope של בלוק, במיוחד בתוך לולאות, הכרזות מותנות או כל מבנה בלוק אחר.
- כדי למנוע התנהגות בלתי צפויה ובאגים, המנע מהכרזה מחדש של משתנים באותו Scope, במיוחד בעת שימוש ב-let.
מוסכמת שמות עבור קבועים ומשתנים
על מנת לשמור שהקוד יהיה כתוב בצורה ברורה וקריאה וכדי להקטין את כמות הבאגים, מומלץ לשמור על Naming Convention (מוסכמת שמות).
ה-Naming Convention הוא אוסף של הנחיות מקובלות איך לקרוא לשמות הקבועים והמשתנים בצורה אחידה וסטנדרטית.
בשמות של קבועים, הדרך המקובלת היא שימוש באותיות גדולות מופרדות בקו תחתי, לדוגמה MAX_LENGTH.
בשמות של משתנים, הדרך המקובלת היא שימוש באותיות קטנות, כאשר האות הראשונה בכל מילה (למעט המילה הראשונה) היא גדולה, לדוגמה numValues.
כמו כן, חשוב ששמות הקבועים והמשתנים יהיו אינפורמטיביים וכאלו שמתארים את מטרת השימוש בהם.
ניתן לקרוא בהרחבה על JavaScript Naming Conventions.