لن أحاول شرح هذا بعد الآن. المنطق يقول أنَّها مشكلة، الكُتَّاب يقولون أنَّها مشكلة [1]، المجتمع يقول أنَّها مشكلة [2]، المنبع يقول أنَّها مشكلة [3]، جميعهم يقولون أنَّها مشكلة منطقيّة وإصلاحها كارثة ما عداك!
رمي مقال استعباطي من أول نتيجة لا يجعل كلامك صحيح ومنطقي + أناقشك ولست أناقش جوجل وأي شخص طفل يستطيع البحث، لست وحدي من أقول أن null رائعة ولها استخدمتها معيار ES يقول [1] وهؤلاء في مجتمع تايبسكريبت (آسف جافاسكريبت بمنطقك) يوضوحون الفرق في الاستخدام بينها وبين undefined واستخدامها في مختلف التطبيقات [2] مجتمع جافاسكريبت كذلك [3] مبرمجين في غير مجتمع جافاسكريبت يوضوحون لماذا null جيدة عموما (بنفس الصورة في جافاسكريبت) [4]
أنت كل ما تأتِ به وتلف وتدور حوله هو تاريخ التصميم وطريقة عمل جافاسكريبت + الرابط الثانِ يشرح ماذا يعني {} + {} وهو عبر التحويل بالتوابع، C# لديها نفس التصميم، C++ لديها شيء مشابه، جافاسكريبت توفر حل للكتابة فوق العمليات وهذا رائع!
وكاختصار هي حدثت بسبب أنَّ الوقت كان قصير لكتابة الإصدار الأوّل من جافاسكربت (يعني قاموا بكتابة أوّل إصدار من هذه اللغة العظيمة - مازلنا في مجتمع تسليّة - بعجلة وكما يقولون "كيف من كان").
. أكبر مثال على هذا أن موضوع null الذي تحدثنا عنه كان من أيام Mocha (انظر هذا نفس الشخص الذي كتب الكود من تلك الأيام يقول بلسانه [5]).
ماشي وما المشكلة؟ كانت خطأ حينها ورّب ضرّة نافعة لولا هذا الخطأ كنّا سنحتاج لتمرير {} والإلتفاف حول طريقة لإرجاع كائن وهمي.
لا يوجد تقريبا كود جافاسكريبت الآن بدون استخدام لـNull، مثلا لو استخدمت نود ستجدها تستخدمها في الإرجاع عن عدم وجود خطأ.
لو هي بعبع وخطأ لهذه الدرجة لمَ تستخدم بدلا من undefined الصحيح؟
لا، لم تأتي حرفياً بعد ES3، وأنت مازلت تكرر كلام جامد (على الأقل أعطني المصدر التاريخي للغة الذي قال لك هذا! فكلامك ليس إنشائياً!).
أوه من جديد، أكره هذا النقاش الذي إذا قلت اليوم 24 ساعة طلب مني المصدر،
صديقي موكا LiveScript كل جافاسكريبت الملحقة برقم اصدار، علاقتها الوحيدة بجافاسكريبت أنهم يشتركون في نفس الأصل أشبه بـABC وبايثون، جافاسكريبت الحالية القياسية بدأت عندما فصل معيار W3C بعيد وبعد ES3 [5] (المرقع على فكرة) وبعد مسح الكثير من الأشياء وأصبحت جافاسكريبت القياسية المعاصرة!
Mocha وActionScript. غيّروا اسم Mocha بعد هذا إلى LiveScript وبعدها إلى JavasScript يعني المشروع لم يتغيّر الكود نفسه (مع تغيرات متتاليّة على الإصدارات طبعاً) والمجتمع نفسه (ومع تغييرات في أعضائه على طول الزمن طبعاً). يعني العلاقة بين JavaScript وActionScript كالعلاقة بين مُفسِر بايثون القياسي (python) ومفسر PyPy كلاهما تنفيذان مختلفان لنفس التوصيفات
لا، طبعا لا أحد يقول هذا، ActionScript كـTypeScript بها الكثير من الأشياء المختلفة عن جافاسكريبت هي في تعريفها لغة منفصلة متأثرة بجافاسكريبت ومعيار ES كـTypeScript [كسلان بصراحة أجيب رابط على كلام معروف للجميع].
PyPy أقرب مثلًا جافاسكريبت وJScript من ميكروسوفت، وأقرب لـC++ وC++.net.
يا حبيبي المشكلة أنَّ العمليات على البت تُقام منذ الأزل على أعداد صحيحة ولكن في عمليات البت في الجافاسكربت تحوّل الإعداد إلى أعداد ذات فاصلة عائمة وبالتالي ستكون العمليّة بطيئة وفيها مشاكل ومحدودة (ياريت تقرأ ما أرفقه لك، مثلا انظر لكلام دوغلاس كروكفورد - مطوّر JSLint - مرّة أخرى [5]).
يا حبيبي الأرقام في جافاسكريبت تحفظ كفاصلة عائمة لأنها Weak Typed رجاء فور جود سيك اقرأ عن IEEE 754، مهو إما كذا أو جافاسكريب تحفظ بقى أرقام صحيحة فقط!
من المنطقي عند عمليات البت ستقوم جافاسكريبت بتحويل الرقم إلى عدد صحيح، ولأنه تقنيًّا تستخدم IEEE 754 ستتعامل مع أول 32 بت فقط (الرقم في جافاسكريبت هو رقمين في الحقيقة سيء نعم لكن هيّا)! لهذا الحد هو 32 بت عند الأرقام الصحيحة.
هل هذا بطئ؟ نظريا نعم، عمليّا V8 يقوم بقوم بها بسرعة فائقة.
أتفق معك أن هذا من أسوأ الأجزاء في جافاسكريبت، أختلف معك لو ستقول أن جافاسكريبت المفترض تقبل أكثر من 32 بت وهي تفعل خطأ كتلك المقالة
مازلت تستخدم مصطلحات متداخلة ولا أحد سيتقبلها. ادخل مثلاً على مشروع مثل JSLint وافتح طلب سحب (PR) وقل للمطوّر أنَّك تريد ترقيع (patch) الكود الفلاني، بعدها أرسل الترقيع المزعوم مُضاف إليه ميزة ولم يُصلَّح به شيء، أقل ما سيفعله المطوّر هو رميك بقنبلة يدويّة وإغلاق الطلب. التحسين غير الترقيع.
يعني بمنطقك ذا، تغير طريقة Print يعتبر ميزة جديدة وليست ترقيع، تغير ترميز السلاسل النصية لا يعتبر ترقيع، كسر الكود السابق لا يعتبر ترقيع، الله على المنطق القنبلي! تغير كل هذا لا يغير شيء فقط ميزة كييوت!
مكتبة "داعش" نحن غيرنا الكود طريقة الكود الخاص بالمكتبة ومن يسمي هذا ترقيع نرميه بقنبلة يدوية :)
بايثون وجافاسكربت لغات متعددة الأغراض (لحظة، جافاسكربت لم تكن فكرتها الاساسيّة كذلك فالربما ينطبق كلامك عليها) وغير مختصة بشيء معين. كون بايثون تعمل علي العديد من المنصات وبالعديد من الأمور يعني أنَّها قابلة للتوسَّع وليست أنَّها مُرقَّعة. هذا هدف بايثون كمشروع منذ البداية
بايثون لم تكن مجرد اسكربت ألم تكن مجرد هاك لهواة يونكس؟ هل جربت العمل مع إضافة لبايثون على ويندوز بـC++؟ ستعرف حقا كم هي لغة متوسعة ورائعة! ومتعددة المتصات!
التحسينات التي أتت مع الإصدار الثالث لم تأتي لتُرقِّع بايثون وتجعلها قادرة على أن تكون متعددة الأغراض فبايثون كذلك من الإصدار الثاني، بل جاءت لتجعلها قابلة للتوسَّع،
لا أعرف كيف تعتقد أن تغير الـSyntax كتغير الـNested functions ليس ترقيع!
على الأقل كانوا أضافوا شيء مفيد كالخطوط!
ولكنك تقولها ككلام إنشائي (للأسف كلامك من البداية بلا أمثلة ولا مصادر، أنت تقول لي أنَّ "هذا هكذا لأنَّه هكذا"! أعطني على الأقل يا أخي شيء واحد يتحدث عن العشوائيّة أو حتّى اشرح لي مثال من الكود المصدري للغة. أنا هنا لاستفاد وليس لأعيد كلام معروف ومحفور في العقول!).
صديقي مثلت لك بالأكواد وربط لك مصادر من مواصفة اللغة نفسها، لكن يبدو أنك لا تقتنع إلا بالمقالات خصوصا تلك المكتوبة في مدونات شخصية!
- عندما أقول 1+1 لا أحتاج أن أكتب مصدر!
جافاسكريبت بها أجزاء سيئة نعم لكن ليست بهذا السؤء وبايثون ليست اللغة السوبر مصممة أستطيع جلب عشرات المقالات حول ذلك (لو أستمر بطريقتك) والاستمرار بجدال إلى يوم القيامة، تعبت بصراحة من هذا الجدال.
إن كان مازال هناك شيء يمكن النقاش حوله بجدية دعنا نكمل النقاش في الرسائل أو مكان ثانٍ مكان التعليق انحشر
التعليقات