:معظم الوقت, تطبيق جافا سكريبت يحتاج للعمل مع معلومات. يوجد هنا مثالان
- متجر علي الانترنت – المعلومات قد تتضمن السلع التي يتم بيعها و عربة التسوق
- تطبيق دردشه – المعلومات قد تتضمن المستخدمين والرسائل والمزيد
المتغيرات تُستخدم لتخزين المعلومات.
المتغير
المتغير “يُسمي مخزن” للبيانات. نحن نستطيع استخدام المتغيرات لتخزين السلع والزائرين والبيانات الاخري
لأنشاء متغير في جافا سكريبت, نستخدم الكلمه
let
الجمله بالاسفل تُنشئ (بعباره اخري: تعلن) متغير يأخذ اسم “message”
let message;
الان, نستطيع وضع بعض البيانات في هذا المتغير بأستخدام الرمز
=
:
let message;
message = 'Hello'; // تخزين النص
النص تم حفظه الان في منطقة الذاكره المرتبطه بالمتغير. نستطيع الان الوصول اليه وأستخدامه بأسم المتغير:
let message;
message = 'Hello!';
alert(message); // يعرض محتوي المتغير
ولكي نختصر عدد السطور, نستطيع دمج تعريف المتغير وتخزين القيمه به في سطر واحد:
let message = 'Hello!'; // تعريف المتغير و تخزين القيمه به
alert(message); // Hello!
نستطيع ايضا الاعلان عن اكثر من متغير في سطر واحد:
let user = 'John', age = 25, message = 'Hello';
قد يبدو اقل في عدد السطور, ولكن لا نوصي بهذه الطريقه. من أجل قراءة أفضل, من فضلك أستخدم سطر واحد لكل متغير.
أستخدام المتغير لكل سطر يكون أطول قليلا, ولكن أسهل للقراءة:
let user = 'John';
let age = 25;
let message = 'Hello';
بعض الناس ايضا يُعرفون المتغيرات بهذه الطريقه:
let user = 'John',
age = 25,
message = 'Hello';
…او حتي يكتب الفاصله في اول السطر
let user = 'John'
, age = 25
, message = 'Hello';
تقنيا, كل هذه الطرق تؤدي لنفس الشئ. لذلك, انها مسألة ذوق وجمال شخصي.
var
بدلا من let
في الاصدارات الاقدم, قد تجد ايضا كلمة اخري: var
بدلا من let
:
var message = 'Hello';
الكلمة var
تكون غالبا نفس الكلمه let
. وهي ايضا تعلن عن متغير, ولكن في مظهر مختلف, طريقة “مدرسه قديمه”.
هناك اختلافات دقيقه بين let
و var
, ولكن لا تُهمنا بعد. نحن سوف نغطي هذه الاختلافات بتفصيل في الفصل إفادة «var» القديمة.
التجانس الحقيقي
نحن نستطيع بسهوله أستيعاب مفهوم المتغير لو تخيلنا انه عباره عن صندوق لتخزين البيانات, ملصوق عليه اسم مخصص له فقط ويحتوي بداخله علي قيمه اهلا بداخله.
نستطيع أن نضع أي قيمة بداخل الصندوق.
ونستطيع أيضا تغيير قيمته أكثر من مره كما نريد.
let message;
message = 'Hello!';
message = 'World!'; // القيمة أتغيرت
alert(message);
عندما تتغير القيمة, البيانات القديمه تُحذف من المتغير:
ونستطيع أيضا تعريف متغيرين و ننسخ القيمه من أحداهما ونضعها في الأخر.
let hello = 'Hello world!';
let message;
// نسخ القيمة "hello world" من المتغير "hello" الي المتغير "message"
message = hello;
// الان المتغييرين يوجد بداخلهم نفس البيانات
alert(hello); // Hello world!
alert(message); // Hello world!
A variable should be declared only once.
A repeated declaration of the same variable is an error:
let message = "This";
// repeated 'let' leads to an error
let message = "That"; // SyntaxError: 'message' has already been declared
So, we should declare a variable once and then refer to it without let
.
من المثير للاهتمام ملاحظة وجود وظيفي لغات برمجه, مثل Scala او Erlang تمنع تغيير قيم المتغير.
في هذه اللغات, القيمه الاولي تُخزن في الصندوق, وتكون للابد. و اذا أردنا تخزين قيمه غيرها, اللغه تُنشئ لنا صندوق جديد (تعريف متغير جديد). ولا نستطيع أعاده استخدام المتغير القديم.
علي الرغم من أنه قد يبدوا غريبا للوهلة الاولي, هذه اللغات قادرة علي التطور الجاد. أكثر من ذلك, هناك مجالات مثل الحسابات المتوازية حيث يمنح هذا القيد فوائد معينة. يُوصي بدراسة مثل هذه اللغة لتوسيع العقل.
تسمية المتغير
هناك طريقتان فقط لتسمية المتغير في جافا سكريبت
- يجب أن يحتوي الاسم على أحرف أو أرقام أو الرموز
$
و_
فقط. - الحرف الاول من الاسم يجب ألا يكون رقم.
أمثله علي الاسماء الصحيحة :
let userName;
let test123;
عندما يحتوي الاسم علي أكثر من كلمة, camelCase تكون الطريقة الشائعه للاستخدام. ويكون كذلك: الكلمات تُرتب واحده تلو الاخري, كل كلمه ما عدا الكلمه الاولي تبدأ بحرف كبير:myVeryLongName
.
ما المثير للأهتمام – علامة الدولار '$'
والتسطير '_'
نستطيع أيضا استخدامهم في الاسماء. أنها رموز عاديه, فقط مثل الحروف,وبدون أي معني أخر.
هذه الاسماء تكون صحيحة الكتابة:
let $ = 1; // تعريف متغير يُسمي "$"
let _ = 2; // وتعريف متغير يُسمي "_"
alert($ + _); // 3
أمثلة لأسماء المتغير الخاطئة:
let 1a; // لا نستطيع نبدأ الاسم برقم
let my-name; // الواصلات '-' غير مسموح بها في التسمية
المتغيرات التي تُسمي apple
و AppLE
يكونوا متغيريين مختلفين تماما
من الممكن أستخدام أي لغة, بما في ذلك الحروف السيريلية أو حتى الحروف الهيروغليفية, مثل هذه :
let имя = '...';
let 我 = '...';
تقنياً, لا يوجد خطأ هنا, مثل هذه الاسماء مسموح بها, ولكن هناك تقاليد عالميه لأستخدام اللغه الانجليزيه في أسماء المتغيرات. حتي لو كنا نكتب نصاً صغيراً, قد يكون لها حياة طويله في المستقبل. الناس من مختلف البلاد ربما يحتاجوا لقرأءتها لبعض الوقت.
هناك قائمة من الكلمات المحجوزه, التي لانستطيع أستخدامها كأسماء متغيرات لأنها تُستخدم بواسطة اللغه نفسها.
علي سبيل المثال: let
, class
, return
, و function
تكون كلمات محجوزة
الكود بالأسفل يعطي خطأ كتابي:
let let = 5; // لا تستطيع تسمية المتغير "let", خطأ!
let return = 5; // وأيضا لا تستطيع تسميته "return", خطأ!
use strict
بشكل طبيعي, نحن نحتاج تعريف المتغير قبل أستخدامه. ولكن في الماضي ، كان من الممكن من الناحية الفنية إنشاء متغير بمجرد تخصيص القيمة بدون استخدام let
. وهذه الطريقة مازالت تعمل حتي الان أذا لم نكتب use strict
في الملفات ولكن للحصول علي توافق مع الكتابة القديمة.
// note: no "use strict" in this example
num = 5; // المتغير "num" أنشئ ولم يكن موجود
alert(num); // 5
هذا تمرين سئ و يسبب خطأ في هذ الوضع:
"use strict";
num = 5; // خطأ: num غير متعرف
الثوابت
لتعريف ثابت (غير متغير), نستخدم const
بدلاً من let
:
const myBirthday = '18.04.1982';
المتغيرات التي تُعرف بأستخدام const
تُسمي “ثوابت”. لا نستطيع أن نغير قيمتها. أذا فعلنا ذلك يحدث خطأ
const myBirthday = '18.04.1982';
myBirthday = '01.01.2001'; // خطأ, لاتستطيع تغيير قيمة الثابت
عندما المبرمج يكون متأكد أن المتغير لن يتغير أبداً, فيجب عليه تعريف المتغير بأستخدام const
لضمان هذه الحقيقة وإبلاغها بوضوح للجميع.
ثوابت ذات الحروف الكبيره
هناك ممارسة شائعة لاستخدام الثوابت كأسماء مستعارة للقيم التي يصعب تذكرها والمعروفة قبل التنفيذ.
تتم تسمية هذه الثوابت باستخدام الأحرف الكبيرة والشرطات السفلية.
علي سبيل المثال, هيا ننشئ ثوابت للألوان في مسميتها “الويب” (السداسي عشري):
const COLOR_RED = "#F00";
const COLOR_GREEN = "#0F0";
const COLOR_BLUE = "#00F";
const COLOR_ORANGE = "#FF7F00";
// ...عندما نحتاج الي أختيار اللون
let color = COLOR_ORANGE;
alert(color); // #FF7F00
الفوائد:
COLOR_ORANGE
يكون أسهل بكثير لتزكره عن"#FF7F00"
.- سهل أن تؤدي للخطأ
"#FF7F00"
اكثر منCOLOR_ORANGE
. - عند قرأءة الكود,
COLOR_ORANGE
يكون له أكثر معني من#FF7F00
.
متي يجب أن نستخدم الحروف الكبيره في تسمية الثوابت ومتي نستخدم الحروف العاديه؟ هيا بنا نوضح ذلك.
الثابت يعني أن قيمة المتغير لن تتغير أبداً. ولكن هناك ثوابت معرفة قبل التنفيذ (مثل الرقم السداسي العشري للون الاحمر) وهناك ثوابت محسوبة في حالة التشغيل, أثناء التنفيذ, ولكن لا تتغير قيمتها الاولية.
علي سبيل المثال:
const pageLoadTime = /* الوقت اللازم لتحضير صفحة الويب */;
قيمة pageLoadTime
غير معرفه في بداية تحضير الصفحة, لذلك من الطبيعي تسميتها. ولكنها مازالت ثابت لانها لم تتغير بعد التعريف.
بمعنى آخر ، تُستخدم الثوابت التي تحمل أسماء كبيرة فقط كأسماء مستعارة لقيم “الثابت الترميز”.
تسمية الاشياء بشكل صحيح
الحديث حول المتغيرات, هناك شئ أخر مهم للغاية.
يجب أن يكون لاسم متغير معنى واضح وواضح يصف البيانات التي يخزنها.
تسمية المتغيرات تكون واحدة من أهم وأعقد المهارات في البرمجه. يمكن أن تكشف لمحة سريعة عن الأسماء المتغيرة الرمز الذي كتبه مبتدئ مقابل مطور متمرس.
خلال مشروع حقيقي, يتم قضاء معظم الوقت في تعديل وتوسيع قاعدة التعليمات البرمجية الحالية بدلاً من كتابة شيء منفصل تمامًا عن نقطة الصفر. عندما نعود إلى بعض التعليمات البرمجية بعد القيام بشيء آخر لفترة من الوقت ، يكون من الأسهل بكثير العثور على المعلومات المصنفة جيدًا. أو بمعنى آخر ، عندما يكون للمتغيرات أسماء جيدة.
من فضلك خذ وقتك في اختيار اسم صحيح للمتغير قبل تعريفه. القيام بذلك سوف يسدد لك بسخاء
بعض القواعد الجيدة لأتباعها وهي :
- أستخدم أسماء متعارف الانسان عليها مثل
userName
اوshoppingCart
. - الابتعاد عن الاختصارات أو الأسماء القصيرة مثل
a
,b
,c
, ألا اذا كنت تعلم ماذا تفعل. - اجعل الأسماء وصفية وموجزة إلى أقصى حد. أمثلة لأسماء سيئة
data
وvalue
. الاسماء هذه لا تعبر عن شئ. من المقبول استخدامها فقط إذا كان سياق الكود يجعل من الواضح بشكل استثنائي البيانات أو القيمة التي يشير إليها المتغير. - وافق على الشروط داخل فريقك وفي ذهنك. إذا كان زائر الموقع يسمى “مستخدم” ، فيجب علينا تسمية المتغيرات ذات الصلة
currentUser
اوnewUser
بدلا منcurrentVisitor
اوnewManInTown
تبدو بسيطة؟ في الواقع ، ولكن إنشاء أسماء متغيرة وصفية وموجزة ليس كذلك. أذهب خلفها.
وأخر ملاحظه. هناك بعض المبرمجين الكسولين الذين يتجهوا الي اعادة استخام المتغيرات الموجوده بدلا من تعريف متغيرات جديده
ونتيجة لذلك ، فإن متغيراتها تشبه الصناديق التي يرمي فيها الناس أشياء مختلفة دون تغيير ملصقاتهم. ماذا يوجد داخل الصندوق الآن؟ من تعرف؟ نحن بحاجة إلى الاقتراب والتحقق.
مثل هؤلاء المبرمجين يوفرون القليل على الإعلان عن المتغير ولكنهم يفقدون عشرة أضعاف أكثر عند اختبار الكود.
المتغير الإضافي جيد ، وليس شرًا.
تعمل متصفحات ومتصفحات جافا سكريبت الحديثة على تحسين الشفرة بشكل جيد بما فيه الكفاية ، لذلك لن تخلق مشاكل في الأداء. يمكن أن يساعد استخدام متغيرات مختلفة لقيم مختلفة المحرك في تحسين التعليمات البرمجية الخاصة بك.
الملخص
نحن نستطيع تعريف المتغيرات لتخزين البيانات بأستخدام الكلمات var
, let
, او const
let
– كتابة حديثة للأعلان عن متغيرvar
– طريقة قديمه للأعلان عن متغير. فطبيعياً نحن لا نستخدمها كثيراً, وبكن تم الشرح بوضوحlet
في الفصل إفادة «var» القديمة, فقط في الحالة التي تحتاجها.const
– يكون مثلlet
, ولكن قيمة المتغير لا نستطيع تغييرها.
يجب علينا تسمية المتغيرات بطريقة تسمح لنا التعرف علي ما بداخلها بسهولة.
التعليقات
<code>
، وللكثير من السطور استخدم<pre>
، ولأكثر من 10 سطور استخدم (plnkr, JSBin, codepen…)