السلام عليكم ،
Netscape حاولت اكساب لغة JavaScript الصغيرة شهرة بأن منحتها كلمة " Java " ، بعد أن أذنت لها Sun بذلك . المضحك أن Sun ماتت و JavaScript الصغيرة لا زالت على قيد الحياة . لغة JavaScript ظهرت لإضافة ميزة " شريط الأخبار المنزلق أعلى الموقع " ، ولاظهار alert للمستخدم ، ولاضافة نوع من الحيوية للصفحة .. كتغيير لون رابط أو تحريك صورة . هذه المزايا أدهشت محترفي برنامج " الرسام " ، فانتقلوا من برنامج الرسام الجامد إلى تطوير مواقع الانترنت . ظهرت مواقع عربية كموقع " كنز السكربتات لنسخ و لصق السكربتات " ، لإضافة تأثيرات حيوية على الصفحة .. مثال : إظهار رسالة alert مئة مرة عند دخول الصفحة .
اليوم الحال مختلف ، أصبحنا في عصر تطبيقات الانترنت ، نحن بحاجة للبرامج المكتبية مثل Word Processor من على الانترنت ، نحن في عصر Cloud Computing .. أنت لا تملك جهاز ، أنت تستأجر جهاز .
للأسف ، محترفي برنامج الرسام لا زالوا هم مطوّري المواقع ، ولو حاولت إقناعه بأهمية merge sort فسيصاب بإحباط .. فهو لا يعرف إلا onload و onclick . و كثير من مبرمجي ++C و Java انتقلوا إلى تطبيقات الانترنت .. فصارت المعادلة : محترفي الرسام vs محترفي Java و ++C ، فظهر السؤال : هل لغة JavaScript المائعة الآن ، مناسبة لتطبيقات الويب ؟ لو وضعنا مسألة السرعة جانباً ، هل اللغة مناسبة لتطبيقات ضخمة ؟
رأيي المتواضع هو لا .. وبتشديد الألف الأخيرة .. أقول : لأ .
أعتقد JavaScript تنتمي لفئة Dynamic Languages ، صحيح ؟ لا أعرف الكثير عن هذه التسميات .. لكن أسلوب JavaScript في التعامل مع المتغيرات ، ومرونتها الشديدة جداً في تقبّل أي شيء تكتبها ، و صعوبة تتبع الأخطاء ( لا تقل لي ، عليك بـ Firebug ) ، يجعلنا بالفعل أمام لغة تصلح فقط لمحترفي برنامج " الرسام " . لا أظن شخصاً جرّب حلاوة Java و روعة ++C ، في " قسوتهما على المبرمج " ، سيحاول تجربة JavaScript لساعة واحدة .
العيب باختصار ، أننا أمام لغة مثل JavaScript ، لا نستطيع أن نبني تطبيقاً رائعاً و منظماً ( من ناحية هندسة الكود ) ، واحتمالية وقوع أخطاء كبيرة أمر وارد . بصراحة ، هل هذا كود يمكن أن يكتبه محترف ( باستثناء محترفي الرسّام ) :
var blabla.x= 10; var dummy = blabla.x;
لو سألت نفسك ، ماهي blabla ، ومن هو x ومانوع المتغير dummy .. فالجواب :
- مبرمجي ++C و Java و اللغات المماثلة : لن يصمدوا طويلاً أمام هذا الكود ، وسيقعوا في الأخطاء .
- محترفي برنامج الرسّام : لن يتعاملوا أصلاً مع كائنات .. فتركيزهم على onclick أكثر ، وإن وجدنا من هو مهتم .. فلن يسأل نفسه كثيراً ، عن المشكلة .. هي كذا وخلاص .
بينما هذا الكود :
Vector v = new Vector(); v.setX(10); int dummy = v.getX();
الكود يشرح نفسه .
أمور أخرى ، هي بمحدودية JavaScript ، فأين Threads مثلاً ؟ أين Framework الجيد و الفئات الأساسية مثل فئات الـ Collections الموجودة في لغة جافا ؟ بل ما ذا تعرف عن قراءة ملف XML عن طريق JavaScript ؟ مهما حاولت إبداء محاسن JavaScript مثل السهولة و المرونة ، فهي زادت عن حدّها وأصبحت عيباً لا يمكن تحمّله أمام " تطبيقات واقعية مثل Word Processor أو معالجة الصور " .
الحل ؟
الحل ، JavaWE ، وهي اختصاراً لـ Java Web Edition . لا تقل لي أنك لم تسمع عنها ؟ صحيح .. هي من اختراعي قبل 10 دقائق ، وهي محاولة فلسفية من الطراز الأول ، لركل JavaScript بعيداً إلى الأفق النائي .. أما شكلها فهو :
<html>
<java src='MainListener.java' ></java>
<body>
<!-- You still able to use JavaScript to do silly things -->
<script type='text/javascript'>
for(var i=0;i<100;i++){
alert('Dumb Alert by a Dumb Painter Proffessional');
}
</script>
<a id='sortAsc' href='java:void()'>Sort Asc</a>
<a id='sortDesc' href='java:void()'>Sort Desc</a>
<form>
<select id="myList">
<option>1</option>
<option>2</option>
<option>3</option>
</select>
</form>
</body>// MainListener Class File
class MainListener extends HtmlListener{
private String sortingType ;
public MainListener(){
this.sortingType = "asc";
}
@override
public onPageLoad(){
Element e = this.getElement("#title");
e.css('color','255');
e.setText('New Title');
e.setText(e.getText().toLower());
}
@override
public onClick(Element e){
// suppose that java supports switch case with string , JDK 7 :-)
switch(e.getId())
{
case "sordAsc":
this.sortingType = "asc";
HelperClass.sortList(e.getElement("#myList"),this.sortingType );
beak;
case "sortDesc":
this.sortingType = "desc";
HelperClass.sortList(e.getElement("#myList"),this.sortingType );
}
}
}
// HelperClass
import "java.util.*"
import "javaweb.html.*"
class HelperClas{
public static void sortList(Element e,String sortType){
if(sortType.equals("asc"))
{
try
{
List list = new ArrayList(HtmlHelper.getListOptions(e));
Collection.sort(list,"asc");
}
catch(Exception e)
{
JOptionPane.showMessageBox(e.toString());
}
}
else
{
List list = new ArrayList(HtmlHelper.getListOptions(e));
Collection.sort(list,"desc");
}
}
}- جمال الكود الخلاّق لوحده ، يكفي .. يكفي إلى أن يظهر شعار NoJS سريعاً .. فماذا لو تكلّمنا عن مسألة " تحويل اللغة من Interpreted إلى Compiled " بشكل حقيقي وكامل ؟
- ماذا لو تكلمنا عن إمكانية تنفيذ السكربت من على السيرفر كخيار ، وخيار آخر تنفيذها على Client مع أخذ الاحتياطات الأمنية ؟
- ماذا لو تكلمنا عن الاستفادة من مئات الحزم البرمجية مثل Graphics2D و مثل OGL ومثل XML .. ؟
- بل وماذا لو تكلمنا عن المولود الجديد OpenCL والذي يمكن أن ندعمه من خلال JavaWE ، بحكم أن هناك نسخة للغة جافا الآن ؟
ما رأيك بهذه العبقرية التي تتدفق الساعة 6 صباحاً ؟
لاتنسَ أن جميع حقوق JavaWE محفوظة لي .. وإن اعترضت Oracle ، نسمّيها abdullahWE ..
بقي ساعة ونصف على بداية الدوام ، لذلك يجب أن أنام ، لم أنم طوال البارحة .
===
عذراً لمحبّي ومحترفي JavaScript ، أنتم عظماء .. لا تلتفتوا للغمز و اللمز الوارد في الموضوع .. مجرد " دعابة ثقيلة " فقط .







