لماذا ionic يتطلب اكثر من لغة عكس flutter لغة dart فقط

السلام عليكم

كنت ابحث عن المنصات التي تطور بها تطبيق يعمل على كل المناصات

فوجدتionic و flutter لكن flutter يطلب لغة و احدة لتعلمه dart فقط

اتمنى اجد جواب لان قررت اشتري جهاز mac و اتعلم على تطوير تطبيقات للاندرويد و ios

و اريد تعلم احد هذه المنصات عشان لا اضيع وقت لدي سنة ونصف او سنتان قبل ان اهاجر الى مكان جديد و اريد ان اتقن شيء ما سوف يساعدني في هجرتي لي احقق مدخول عبر تطوير تطبيقات الهواتف


التعليق السابق

جافاسكربت لغة سيّئة كُتبت في عشرة أيام، فمن weak typing لعدم امتلاكها أيّ نهج برمجي فهي ليست OOP و تحتاج الكثير من الـ hacks للعمل كـ FP

لذلك هي تملك الكثير من الـ transpilers لأنّها سيئة و لا يمكن إطاقة كتابة مشاريع كبرى فيها على سبيل المثال يمكنك في جافا سكربت عن طريق الخطأ أن تسند قيمة لـ undefined (الـ null) و يمكنك عن طريق الخطأ أن تكتب 1 + "1" و تعطيك النتيجة 11.

جافاسكربت لغة سيّئة كُتبت في عشرة أيام، فمن weak typing

جافاسكريبت الآن تطورت كثيرا عن تلك اللغة البسيطة التي تزين صفحات الويب، كونها Weak Typed هو في الحقيقة ميزة عندما تتعامل مع صفحات الويب وغيرها وتحتاج لغة مرنة وسريعة.

فهي ليست OOP

أمتأكد أنك تتحدث عن جافاسكريبت؟

لذلك هي تملك الكثير من الـ transpilers لأنّها سيئة

ولأنها أيضًا تملك قاعدة كبيرة من جمهور المطورين.

و لا يمكن إطاقة كتابة مشاريع كبرى فيها

لا يمكنك قول "لا يكون" بالمطلق، وهذا أصلًا يتنافى كليًا مع كم المواقع والمشاريع المكتوبة بها، PHP مثلا التي يمكن أن تكون أسوأ لغة معروفة في تاريخ البشرية مع هذا الكم من الترقيع؛ مازالت تسيطر على خوادم أشهر مواقع الويب.

يمكنك في جافا سكربت عن طريق الخطأ أن تسند قيمة لـ undefined (الـ null)

لا أعرف متى تكتب هذا عن طريق الخطأ، لكن عموما هذه المشكلة حلت، لا يمكنك إسناد قيمة لمجهول (Not defined وليس بقيمة Undefined) في الوضع الصارم وسيظهر خطأ لو حدث. null وundefined هي قيم ثابتة لها استخدامتها في تطبيقات جافاسكريبت.

و يمكنك عن طريق الخطأ أن تكتب 1 + "1" و تعطيك النتيجة 11.

نفس الأمر في لغات عديدة كـC#، ولا أدري ما الخطأ في الموضوع! الخطأ هو أن تكون القيمة 2، المفترض عندما يوجد String في سلسلة العمليات تحوّل كل القيم من خلال toString وهذا ما يحدث.

وفي ES6 يمكنك الإعلان عن Symbol.toPrimitive لإرجاع قيمة معيّنة بحسب نوع العملية، خاصية رائعة لا تجدها في الكثير من اللغات الأخرى.

جافاسكريبت الآن تطورت كثيرا عن تلك اللغة البسيطة التي تزين صفحات الويب، كونها Weak Typed هو في الحقيقة ميزة عندما تتعامل مع صفحات الويب وغيرها وتحتاج لغة مرنة وسريعة.

الـ weak typed ندفع ثمنه غالباً في runtime compile checking، أفضل نوعية اللغات التي تخبرك بخطأك حال حدوثه، طبعاً هنا أتحدث عن جافاسكربت و ليس تايب سكربت التي حلّت المشكلة نوعاً ما.

أمتأكد أنك تتحدث عن جافاسكريبت؟

نعم plain javascript التي تعمل على المتصفحات من شبه المتسحيل كتابة كلاس فيها

var Greeter = /** @class */ (function () {

function Greeter() {
}
return Greeter;

}());

هذا يمكن ترجمته في لغة OOP حقيقة مثل سي شارب إلى سطر واحد ناهيك عن أنّها لا تحتوي على access modifier

أعتقد أنّك تتحدث عن جافا سكربت نكست و التي في الحقيقة تتحول في النهاية الي جافاسكربت يفهمها المتصفح ES 2015 على ما أعتقد

لا يمكنك قول "لا يكون" بالمطلق، وهذا أصلًا يتنافى كليًا مع كم المواقع والمشاريع المكتوبة بها، PHP مثلا التي يمكن أن تكون أسوأ لغة معروفة في تاريخ البشرية مع هذا الكم من الترقيع؛ مازالت تسيطر على خوادم أشهر مواقع الويب.

بي اتش بي لا زالت حيّة بسبب legacy code لا أكثر, هناك مشاريع كبيرة تستخدم تايب سكربت او ES next بالطبع لكنني كنت أقصد جافاسكربت كلغة لوحدها بدون أي transpilation

لا أعرف متى تكتب هذا عن طريق الخطأ، لكن عموما هذه المشكلة حلت، لا يمكنك إسناد قيمة لمجهول (Not defined وليس بقيمة Undefined) في الوضع الصارم وسيظهر خطأ لو حدث. null وundefined هي قيم ثابتة لها استخدامتها في تطبيقات جافاسكريبت.

مجرد أن تسمح اللغة بذلك هي مصيبة، أليس كذلك؟

لا، TypeScript هي لغة كاملة مكتملة لا ينقصها شيء.

عندما نتحدث عن لغة فيجب أن يكون لها Runtime على الأقل، على أيّ منصّة ستشتغل المشاريع؟ لذلك الكود يتحول إلى جافاسكربت بحيث يترجمه المتصفح.

كل تعليقي كان حول ES6 التي هي مدعومة بشكل شبه كامل في أحدث نسخ المتصفحات كلها، ESNext الآن هي ES7 وما بعدها.

الـ weak typed ندفع ثمنه غالباً في runtime compile checking، أفضل نوعية اللغات التي تخبرك بخطأك حال حدوثه، طبعاً هنا أتحدث عن جافاسكربت و ليس تايب سكربت التي حلّت المشكلة نوعاً ما.

يا صحبي للأمر مميزات وعيوب كاي شيء، في نفس الوقت لا تظهر أخطاء سخيفة كون الويب نفسه مع HTML وCSS لا يصلح أن يكون Strong Typed خصوصا القيّم الرقمية، TypeScript متعبة جدًا في الواجهات.

نعم plain javascript التي تعمل على المتصفحات من شبه المتسحيل كتابة كلاس فيها

Class لا يعني Object، في جافاسكريبت كل شيء هو كائني حتى الأنواع البدائية Primitive، البرمجة الكائنية في جافاسكريبت ممتعة وسهلة بعكس لغات نصية كثيرة كـLua، أخبرني في كم لغة يمكنك فعل هذا؟

Number.prototype.isBigger = function isBigger(than) {
    return this > than;
}
console.log(3e8.isBigger(7 * 10)); 

وعلى جانب أخر المفتاح class يأتي في المعيارية ES6 وليس ESNext وتدعمه كل متفحات الويب المشهورة.

فلا تحتاج إلا class greater ...

هذا يمكن ترجمته في لغة OOP حقيقة مثل سي شارب إلى سطر واحد ناهيك عن أنّها لا تحتوي على access modifier

لغة OOP حقيقية؟! مجرد Syntax وتوجه مختلف.

أكثر التطبيقات التي ستكتبها بجافاسكريبت لن تحتاج Access Modifier جرب TypeScript مع مشروع ويب، عمومًا هي قادمة كمسودة في ESNext.

هناك مشاريع كبيرة تستخدم تايب سكربت او ES next بالطبع لكنني كنت أقصد جافاسكربت كلغة لوحدها بدون أي transpilation

يمكن كتابة مشروع "كبير" بـES6 أو حتى 5!

مجرد أن تسمح اللغة بذلك هي مصيبة، أليس كذلك؟

ليست مصيبة ولا شيء، هي كانت طريقة لتعريف متغيرات عامة (Global)، ومع تطور اللغة أصبحت سيئة ومسحت.

عندما نتحدث عن لغة فيجب أن يكون لها Runtime على الأقل، على أيّ منصّة ستشتغل المشاريع؟ لذلك الكود يتحول إلى جافاسكربت بحيث يترجمه المتصفح.

اللغة لغة حتى ولو لم يكتب لها مفسرًا أو مترجمًا، وحتى لو تترجم يدويًا، TypeScript لغة تعريفًا ونظريًا وعمليًا، وC وC++ وكذا C# لا يوجد لهم Runtime كامل ومباشر بمفسر بل يترجمون إلى لغات وأشكال أخرى تنفيذية على عدة مراحل مختلفة (بحسب المجمع ونظام التشغيل) لتستطيع تشغيلهم.

كل تعليقي كان حول ES6 التي هي مدعومة بشكل شبه كامل في أحدث نسخ المتصفحات كلها، ESNext الآن هي ES7 وما بعدها.

عرفت ذلك من استغرابك من إنكاري لاستخدام اللغة لـ OOP، هي مدعومة فقط من Major browsers لذلك يبقى اعتمادها كـ standards سابقاً لأوانه الآن.

يا صحبي للأمر مميزات وعيوب كاي شيء، في نفس الوقت لا تظهر أخطاء سخيفة كون الويب نفسه مع HTML وCSS لا يصلح أن يكون Strong Typed خصوصا القيّم الرقمية، TypeScript متعبة جدًا في الواجهات.

لا أعمل مع الواجهات كثيراً لحسن الحظ لذلك لا استطيع العيش بدون تايب سكربت، خاصّة في تعريف نوع المتغيرات التي بدونها لن تحصل حتى على intellisense أثناء كتابة المشروع.

Class لا يعني Object، في جافاسكريبت كل شيء هو كائني حتى الأنواع البدائية Primitive، البرمجة الكائنية في جافاسكريبت ممتعة وسهلة بعكس لغات نصية كثيرة كـLua، أخبرني في كم لغة يمكنك فعل هذا؟

نعم الكلاس مجرد Block لكتابة الكود لكنّه يؤمن الكثير من المميزات كـ modularity و هو ربما السبب الرئيسي في شهرة تايب سكربت، خصوصاً للقادمين من سي شارب أو جافا، تعلّمت تايب سكربت في ساعة و نصف بسبب أخذهم هذ النهج.

لم أقل أنّ جافا سكربت سيّّئة نعم objects فيها جيّدة، الكثير من المميزات مؤخراً، عمل casting من رقم إلى string يحتاج فقط إلى إضافة + بينما في لغات أخرى سطر كامل تقريباً.

أكثر التطبيقات التي ستكتبها بجافاسكريبت لن تحتاج Access Modifier جرب TypeScript مع مشروع ويب، عمومًا هي قادمة كمسودة في ESNext.

الـ OOP تتضمن العديد من المفهايم مثل sperationg of concerns للكلاس حيث أنّه لا ينبغي به أن يبوح بـ internal implementation لخارج الكلاس، نعم لا يمكن لمبرمج أن يفعل ذلك بالخطأ لكنّها تحسن من الكود و تجعله أكثر تنظيماً كما أنّها تمكنك من عمل Abstract class و بذلك تحتاج عامل الوصول pretected.

يمكن كتابة مشروع "كبير" بـES6 أو حتى 5!

نعم بواسطة ES6 هناك أمثلة كثيرة كمحرك بحث Duckduckgo لا أقول أنّها مستحيلة بواسطة ES5 لكنّها فكرة مجنونة خصوصاً بتوافر البدائل

اللغة لغة حتى ولو لم يكتب لها مفسرًا أو مترجمًا، وحتى لو تترجم يدويًا، TypeScript لغة تعريفًا ونظريًا وعمليًا، وC وC++ وكذا C# لا يوجد لهم Runtime كامل ومباشر بمفسر بل يترجمون إلى لغات وأشكال أخرى تنفيذية على عدة مراحل مختلفة (بحسب المجمع ونظام التشغيل) لتستطيع تشغيلهم.

هناك فرق كبير بين اللغة التي تُترجم إلى Byte code أو Machine code و التي تترجم إلى لغة أخرى، تايب سكربت شأنها شأن دارت و كوفي سكربت، لكنّها ثوريّة بالفعل.

عرفت ذلك من استغرابك من إنكاري لاستخدام اللغة لـ OOP، هي مدعومة فقط من Major browsers لذلك يبقى اعتمادها كـ standards سابقاً لأوانه الآن.

في الويب يفضل أن لا تشغل بالك إلا بدعم أخر إصدارين؛ فمعظم المتصفحات باتت تحصل على تحديث تلقائي والمستخدم لن يصل موقعك وهو ليس لديه انترنت، جرّب بنفسك متصفح قديم ولن تجد الويب الذي تعرفه يعمل.

class جاهزة للاستخدام من 2017.

بدون تايب سكربت، بدونها حتى لا تستطيع خاصّة في تعريف نوع المتغيرات التي بدونها لن تحصل حتى على intellisense أثناء كتابة المشروع.

هذه الميزة الوحيدة التي تجعلني أستخدم TypeScript بجانب ترجمتها لأنظمة الـModule المختلفة ولا تجعلني أصدع دماغي مع AMD وCommonJs و...

لكن يمكن الحصول على شيء مشابه نوعا ما، باستخدام JSLint وJSDoc معًا.

نعم الكلاس مجرد Block لكتابة الكود لكنّه يؤمن الكثير من المميزات كـ modularity و هو ربما السبب الرئيسي في شهرة تايب سكربت.

لا أعتقد، TypeScript أخذت الـClass من معيارة ES6 وكانت جافاسكريبت بدأت بدعمها، ربما ما شهرها هو عبورها للمعياريات وثباتها (كود واحد وأشكال كثير من جافاسكريبت) وممكن الـStrong Typing.

الـ OOP تتضمن العديد من المفهايم مثل sperationg of concerns لا يحب للكلاس أن يبوح بـ internal implementation لخارج الكلاس، نعم لا يمكن لمبرمج أن يفعل ذلك بالخطأ لكنّها تحسن من الكود و تجعله أكثر تنظيماً كما أنّها تمكنك من عمل Abstract class و بذلك تحتاج عامل الوصول pretected.

يمكنك الوصول لهذا مع ES5 باستخدام IIFE لكن الأفضل طبعًا انتظار ESNext.

هناك فرق كبير بين اللغة التي تُترجم إلى Byte code أو Machine code و التي تترجم إلى لغة أخرى، تايب سكربت شأنها شأن دارت و كوفي سكربت، لكنّها ثوريّة بالفعل.

صديقي C# (بمجمّع ميكروسوفت) وكل لغات .NET تترجم إلى لغة MSIL القابلة للقراءة تجعلها تعمل بنفس طريقة عمل TypeScript.

بعض مجمعات C++ تترجمها إلى C قبل تحويلها إلى ملف تنفيذي في الأنظمة البدائية.

وحتى لو، كل هذا لا ينفي أنها لغة وتبقى أمور تتعلق بعملية التنفيذ وليس اللغة نفسها.

في الويب يفضل أن لا تشغل بالك إلا بدعم أخر إصدارين؛ فمعظم المتصفحات باتت تحصل على تحديث تلقائي والمستخدم لن يصل موقعك وهو ليس لديه انترنت، جرّب بنفسك متصفح قديم ولن تجد الويب الذي تعرفه يعمل.

الشركة التي عملت بها صيفاً تدعم حتى IE6 لا أصدّق أنّ هناك إنساناً يعرف ما يفعل يستخدمه حتى الآن و هذا سبب ابتعادي بشكل كبير عن الفرونت إند، الفريق كان يقضي جزء كبير من الوقت في الـ hacks الخاصّة بهذا المتصفح.

يمكنك الوصول لهذا مع ES5 باستخدام IIFE لكن الأفضل طبعًا انتظار ESNext.

ليس مستحيلاً لكنّها تظل فكرة مجنونة في ظل تعدد الخيارات الأخرى.

صديقي C# (بمجمّع ميكروسوفت) وكل لغات .NET تترجم إلى لغة MSIL القابلة للقراءة تجعلها تعمل بنفس طريقة عمل TypeScript.

الـ CLI هو مجرد وسيط لتعدد المنصّات (شاشات - إكس بوكس - ديسكتوب) بينما تايب سكربت تترجم إلى لغة أخرى بحد ذاتها.

الشركة التي عملت بها صيفاً تدعم حتى IE6 لا أصدّق أنّ هناك إنساناً يعرف ما يفعل يستخدمه حتى الآن و هذا سبب ابتعادي بشكل كبير عن الفرونت إند، الفريق كان يقضي جزء كبير من الوقت في الـ hacks الخاصّة بهذا المتصفح.

AK-47 وصفي به كل أعضاء تلك الشركة :)

في 2015 أو 2014 أعتقد كتبت موضعًا هنا على أريبيا (بحسابي القديم) عن عميل وجد موقعه لا يعمل بشكل صحيح على IE7 وكل النقاش كان عن تجاهله وعن مدى حماقة الفكرة!

من يستخدم IE6 في 2018 هو جاهل بكل ما تعنيه الكلمة، أو حتى IE9 ويفترض أن تحجب الموقع عنه لأنه لن يأتي من مستخدم كهذا غير المشاكل واستهلاك فاضي لموارد الخادم.

دعم المتصفحات القديمة جريمة بمعنى الكلمة، فأنت تساعد المستخدم على عدم تغير متصفحه وتعرضه أمانه للثغرات (كروم حتى إصدارات 2017 وباقي المتصفحات كذلك معرضة لثغرة Meltdown/Spectre)، لو وكل لي الأمر سأعدم كل مدير مشروع يخطط لدعم متصفح قديم :)

الـ CLI هو مجرد وسيط لتعدد المنصّات (شاشات - إكس بوكس - ديسكتوب) بينما تايب سكربت تترجم إلى لغة أخرى بحد ذاتها.

اختلاف أقرب لنظري والفكرة واحدة، TypeScript لا تنقص شيء عن أي لغة.

في 2015 أو 2014 أعتقد كتبت موضعًا هنا على أريبيا (بحسابي القديم) عن عميل وجد موقعه لا يعمل بشكل صحيح على IE7 وكل النقاش كان عن تجاهله وعن مدى حماقة الفكرة!

المصممين الذين يدعمون هذا المتصفح عليهم الشعور بالذنب لأنّهم يبقونه حيّاً، لو عرف المستخدم أنّه لن يعمل فسينصّب غيره و لا أعتقد أنّ أحداً يعمل عليه الآن، لكن يبقى العميل هو العميل، أنا ممتن لعملي في الباك إند، لا أحد يرى ما نفعله :).

دعم المتصفحات القديمة جريمة بمعنى الكلمة، فأنت تساعد المستخدم على عدم تغير متصفحه وتعرضه أمانه للثغرات (كروم حتى إصدارات 2017 وباقي المتصفحات كذلك معرضة لثغرة Meltdown/Spectre)، لو وكل لي الأمر سأعدم كل مدير مشروع يخطط لدعم متصفح قديم :)

لدينا شركتان أو ثلاث هنا، خلال عمليّة التسويق يكتبون "دعم لكلّ المتصفحات بما فيها IE" فيظنّ العميل أنّه شيء جيّد

اخي كيف تقول جافا سكريبت لغة ثمينة و تعود وترد تقول لغة سيئة؟؟

لغة ثمينة لأنّها على مستوى فرص العمل تملك حصّة كبيرة و ذلك بسبب امتلاكها أفضل Ecosystem بين البقيّة لكنّها لغة سيّئة كلغة برمجة و ليست حتى قريبة من لغات جبارة مثل kotlin swift c_sharp

الناس لا تفكر هل هيا سيئة ام لا اهم شيء على قولتك ثمينة على مستوى العمل

انا تعلمت جافا و كوتلن وكلهم لغات سهلة لكن الآن اطررت ان اتعلم احد هذه المنصات تطبيق واحد يعمل على أكثر من منصة هاتف

كنت سوف اطور تطبيقي على الاندرويد

بعدها قلت طيب اريد تطبيقي على iOS

وهذا سوف يكلفني مبلغ لكي أجعل مطور iOS هوا من يبرمج تطبيقي

صحيح اني لا استطيع توفير قيمة mac و قيمته مره مرتفعة لم أصدق قيمة mac بقيمة مهر بنت هه لكن لمن هم لديه دخل سوف يشتريه

بعدها وجدت حل في مجتمع ionic

يقولون هناك خدمات سحابية لتجربة تطبيقك ورفعه على أبل ستور قلت ولله الحمد كل شيء له حل فقط نحتاج البحث و الصبر

إذا كان الهدف هو تطوير تطبيقات الايفون بدون ماك فالحلول كثيرة و يمكن تطبيقها على اغلب المنصات

للاسف تعتبر سرقة اخي العزيز

نحن نتعلم البرمجة لكي نربح حلال

يالا في المستقبل بعد أن انجح في مجالي ان شاء الله سوف اشتري ماك

لتطوير تطبيقات ايفون لا أعلم لماذا أبل رافعة سعر أجهزتها لهذا الحد مع اني اشوف واحد من ١٠٠ يستخدم ماك او ايفون

و العكس مع اندرويد و وشركات الحواسيب المحمولة

لم أقل أن ionic سيّء و لو أنّه يستخدم web browser مما يؤثّر على الأداء بعض الشيء، هناك الكثير من الحلول للـ cross platform و Xamarin مع C# أحدها لكن لا تتوقع أنّ أيّ من هذه المنصّات سيعطيك الأداء و الـ native API نفسها المعطاة من اللغات الـ standrad للمنصّة.

الخلاصة، تعلم تقنيات جافاسكربت كـ Node و Angular، هي المطلوبة الآن على عدة مجالات (ويب موبايل و ديسكتوب) إلى جانب .net core و kotlin، آيونك خيار جيّد هناك أيضاً Native script و هي أفضل برأيي لكن إن كنت تريد أن تصبح مطور جوال فعليك بالتخصص في منصّة معيّنة مع kotlin أو swift

وما ذا تقول عن ال React native ؟ الخاص ب facebook ؟ تنتج تطبيقات IOS و Android . عن طريق الجافا سكريبت .. اي نعم يتم ترجمتها ولكن تبقى انت تكتب جافا سكريبت صرفة !

هذا الحكي قديم جدا

شفت ES6 ؟