تطوير المواقع الإلكترونية MEAN-Stack from A to Z مقدمة: الجافاسكريبت Level1
لغة البرمجة JavaScript أو كما يمكن إختصارها لـ JS كما ذكرت من قبل ظهرت الـ JS في عام 1995 و كانت مهمتها تحسين الشكل الخارجي للمواقع عن طريق إضافة بعض الحركة أو التأثيرات البصرية و الصوتية و كانت تستخدم بكثرة في عمل خلفيات متحركة مثل تساقط الورود أو الثلوج حول النصوص و الصور (كانت تلك موضة النصف الثاني التسعينات و بداية الألفينات في تصميم المواقع). أو أن يتحول زر إلي لون مختلف عند المرور عليه بالمؤشر أو أن يتم تكبير صورة عند الضعط عليها كل تلك المؤثرات كانت ثورة في عالم مواقع الإنترنت و كانت وقتها حمي الـ dot com في ذروتها و إنتعاش كبير لوادي السيليكون في الولايات المتحدة الأمريكية و ملايين بل و مليارات الدولارات تنهمر كإستشمارات علي شركات المواقع الإلكترونية
و كانت الـ JS علي بساطتها وقتها هامة لشكل و تصميم المواقع لأنها بالفعل كانت ثورة لآنها و لأول مرة يمكن تنفيذ كود برمجي علي مستوي المتصفح وقتها إشتعلت حرب المتصفحات بين مايكروسوفت و نيتسكيب التي قامت بتطوير الــ JS و ردا عليها قامت مايكروسوفت بتطوير لغة تنفذ علي مستوي المتصفح و أسمتها بـ VbScript و ضمنتها في متصفها internet و explorer و علي الجانب الأخر تبنت باقي الشركات لغة ال JS و حتي بعد ظهور متصفحات أخرى تبنوا لغة الJS بعد فترة خسرت مايكروسوفت حرب المتصفحات و بعدها تخلت عن لغتها VbScript (بل و دعمت أيضا لغة الـ JS و طورتها بل أنها قامت بعمل نسخة محدثة منها تسمي TypeScript سنتطرق لها في المحاضرة الثالثة ) مما جعل لغة JS هي اللغة المهيمنة علي مجال ال front-end و قامت كل الشركات الكبري ببناء مكتبات و أطر عمل قائمة علي الـ JS حتي أصبح الأن حوالي 97% من المواقع الإلكترونية الموجودة علي الإنترنت تم صناعتها بلغة الـ JS و حتي لو لم تكن مصنوعة بالكامل بالـ JS فهي داخلة في تصنيعها بطريقة أو بأخري
و في 2009 كانت القفزة الأخري للغة JS حينما ظهرت بيئة العمل Node JS حيث قامت على محرك جوجل كروم V8 الخاص بتنفيذ أوامر الـ JS علي المتصفح , و لكن كانت الـ Node JS ثورة بالفعل فلأول مرة أصبح بإمكان تنفيذ أكواد لغة JS علي مستوي السيرفر و التعامل مع قواعد البيانات و ملفات النظام و هو ما كانت تعجز عنه من قبل فالأكود التي تتضمن في صفحات الويب لا تعمل الإ علي المتصفح فقط و ليس لها إمكانية وصول للسيرفر و ملفاته و بذلك يمكن إستخدام لغة واحدة لبرمجة موقع إلكتروني ديناميكي (يحتوي علي محتوي متغير يستطيع المستخدم تغيير المحتوي بدون الحاجة لتغيير أكواده البرمجية حيث يتم تسجيل المحتوي إما في قاعدة بيانات أو في ملفات علي السيرفر) بعد أن كان مطورين المواقع الإلكترونية يستخدموا لغة برمجة للـ back-end غير الـ JS بعدها تنامت أهمية الـ JS و دورها في صناعة التطبيقات حتي أنها اليوم أصبحت تقوم بصناعة تقريبا جميع أنواع التطبيقات مثل :
- المواقع الإلكترونية
- تطبيقات سطح المكتب
- تطبيقات الهواتف الذكية
- تطبيقات الأجهزة الذكية مثل الساعات و اجهزة التلفزيون
- تطبيقات الـ IoT أو ما يعرف بإنترنت الأشياء :و هو بالفعل سيكون متداخل في جميع الأجهزة التي نستخدمها كل لحظة مثل الغسالات و الثلاجات و حتي المصابيح الكهربائية يمكننا التحكم بكل تلك الأجهزة عن طريق تطبيقات تصنع بلغة JS أيضا
- التطبيقات التي تتحكم في الروبوتات و الدرونات
- صناعة الألعاب
Screen shoot: https://www.statista.com/statistics/793628/worldwide-developer-survey-most-used-languages/
الـ JS علي مستوي الـ front-end
يمكنك كتابة كود الـ JS في نفس ملف الـ HTML إما داخل الـ Head أو داخل الـ Body مثل:- الكود في الـ Head
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
// your JS code here
</script>
</head>
<body>
</body>
</html>
- الكود في الـ Body
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// your JS code here
</script>
</body>
</html>
الفرق بين الطريقتين , في الطريقة الأولي عندما يكتب في الـ Head يتم تنفيذ الكود قبل أن يتم تحميل عنصر الـ Body و العناصر الموجودة بداخله, بينما عندما ينفذ الكود في أخر الـ Body ينفذ الكود بعد تحميل الـBody و عناصره (أيضا يمكن كتابته وسط عناصر الـ Body و ينفذ الكود بعد تحميل العناصر التي سبقته في ترتيب الكتابة) او يمكن كتابة كود الـ JS في ملف منفصل عن ملفات الـ HTML عن طريق إنشاء ملف يكون إمتداده .js و يتم دمجه في ملف الـ HTML فبدلا من كتابة كود الـ JS بهذه الطريقة
<script>
// your JS code here
</script>
//يتم استدعائه بهذه الطريقة
<script src="index.js"></script>
حيث أن src اختصار لـ source و تشير إلي مسار الملف في المشروع و أيضا يمكن وضعه في الـ head أو الـ body
يستطيع كود الـ JS التعامل مع ثلاثة Objects أو أماكن بالمعني المجازي و هم:
DOM (Document Object Model)
و هو عبارة عن Object يحتوي علي صفحة الـ HTML بكل مكوناتها و يستطيع كود الـJS التحكم بكل مكونات الصفحة مثلا أن يغير النصوص في عنصر معين , او حذف عنصر أو تعديل عنصر أو تغيير تنسيق عنصر (style) و يستخدم الـ object المسمي بـ document للوصول لعناصر صفحة الـ HTML مثال: إذا أردت تغيير لون كتابة عنصر العنوان الرئيسي في الصفحة h1 للون الأحمر مثلا
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1> my title </h1>
<script>
document.querySelector('h1').style.color='red';
</script>
</body>
</html>
في المثال السابق استخدمنا قمنا بالدخول للـ document و بعدها استخدمنا الفنكشن الخاصة بالبحث عن عنصر داخل الـ html document و التي تسمي querySelector و نقوم بتمرير اسم العنصر لها "h1” في حالتنا , في حالة اذا اردنا الوصول لعنصر عن طريق الـ ID نقوم بتغيير الكود كالتالي:
document.querySelector('#elementId').style.color='red';
document.querySelector('.elementStyleName').style.color='red';
يلاحظ عند استخدام الفانكشن querySelector تقوم باحضار أول عنصر فقط يحمل الإسم أو ال Id أو اسم الستايل و القيام بتنفيذ الكود عليه , هي فانكشن تقوم بإستدعاء أول عنصر فقط أما إذا أردنا التعامل مع كل العناصر سنتطرق لذلك لاحقا بفانكشن أخرى.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<input type="text" id = "name" value=""/>
<input type="button" value="Say welcome" onclick="SayWelcome()">
<label id = "welcome" ></label>
<script>
function SayWelcome(){
var myName = document.querySelector('#name').value;
var welcomeLabel = document.querySelector('#welcome');
welcomeLabel.innerHTML = 'welcome : ' + myName ;
}
</script>
</body>
</html>
Console
هو جزء داخل المتصفح يتم تسجيل فيه الأحداث و الأخطاء التي تحدث عند تنفيذ الكود أو استخدامه في إختبار الكود و يمكن تنفيذ الكود بداخله عن طريق استخدام الـ Object المسمى بـ console مثلا عند كتابة رسالة به مثلا نقوم بكتابة
console.log('my message');
BOM (Browser Object Model)
و هو الـ object الذي يتعامل مع الـ المتصفح ككل و يحتوي بداخله جميع الـ Objects الأخري و يمكن التعامل معه بالكلمة window فمثلا إذا أردنا كتابة رسالة تحذيرية مثلا تظهر للمستخدم يمكننا كتابتها بالشكل التالي:
window.alert('my message');
window.open('http://google.com','_blank');
alert('my message');
open('http://google.com','_blank');


