أسئلة وأجوبة مقابلة Scala

مرحبًا بك في أسئلة وأجوبة مقابلة Scala. في الوقت الحالي، يستخدم معظم الشركات في مجالات الخدمات المالية/المصرفية، والحكومة، والاتصالات، وشبكات التواصل الاجتماعي، إلخ، أطُلقت Scala، Play، وAkka Framework لتطوير مشاريعها؛ نظرًا لأن هذه الأطُر تدعم كلًا من خصائص البرمجة الشيئية وبرمجة الدوال الفعّالة، وتوفر أيضًا العديد من المزايا.

أسئلة مقابلة Scala

سأشارك معكم معرفتي في المقابلات وتجربتي في بيئة Scala الكاملة أو تطوير Scala الكامل الكومبيوتري (Scala/Play/Akka) من خلال عدة مشاركات. سأشارك معكم 3 مشاركات منفصلة. بعض الأسئلة تتكون من سؤال واحد فقط، والبعض الآخر يحتوي على بعض الأسئلة الفرعية. إجمالًا، سأناقش حوالي 200 سؤال. أراهن إذا كنت ملمًا بكل هذه الأسئلة، فسوف تجتاز بالتأكيد جميع مقابلات مطوّري Scala. ومع ذلك، إذا كنت ترغب في متابعة مسار مطوّر Scala الكامل الكومبيوتري، يجب أن تتعلم جميع تقنيات تطوير Scala الكاملة بعناية.

مقدمة

I’m going to deliver Scala/Play/Akka Interview Questions and Answers in three parts:

  1. أسئلة وأجوبة مقابلة Scala:

    سنناقش بعض الأسئلة الأساسية لمقابلة Scala هنا، والتي تكون مفيدة للمبتدئين أو مطوري Java الذين يرغبون في الانتقال إلى تطوير Scala أو خبرة 1+ عامًا كمطور Scala.
    أسئلة وأجوبة مقابلة Scala المتوسطة:-
    سنناقش بعض أسئلة المقابلة، والتي تكون مفيدة لمن لديهم خبرة 2+ سنوات كمطور Scala/Java.
    أسئلة وأجوبة مقابلة Scala المتقدمة:-
    سنناقش بعض أسئلة المقابلة، والتي تكون مفيدة للمطورين الكبار أو ذوي الخبرة في Scala/Java.
    أسئلة وأجوبة مقابلة Scala/Java لتعدد المهام والتوازي:-
    سنناقش أسئلة وأجوبة مقابلة Scala/Java لتعدد المهام والتوازي، والتي تكون مفيدة للمطورين الكبار أو ذوي الخبرة في Scala/Java.

سنناقش أيضًا بعض الفروقات بين بناء Scala و Java بحيث يمكن للمستخدمين (الذين ينتقلون من Java إلى Scala) الاستفادة من هذه المشاركات. في هذه المشاركة، سنناقش بعض الأسئلة الأساسية لمقابلة Scala. اقرأ مشاركاتي القادمة لبقية القسمين.

أسئلة مقابلة Scala الأساسية

في هذا القسم، سنقوم بتقديم جميع أسئلة المقابلة الأساسية في سكالا، وفي القسم التالي سنناقشها بالتفصيل.

  1. ما هو سكالا؟ هل هو لغة أم منصة؟ هل تدعم البرمجة الكائنية أم البرمجة الوظيفية؟ من هو والد سكالا؟
  2. هل سكالا لغة مكتوبة بشكل ثابت؟ ما هي لغة مكتوبة بشكل ثابت وما هي لغة مكتوبة بشكل ديناميكي؟ ما الفرق بين لغات البرمجة المكتوبة بشكل ثابت والمكتوبة بشكل ديناميكي؟
  3. هل سكالا لغة برمجة كائنية بحتة؟ هل جافا لغة برمجة كائنية بحتة؟
  4. هل تدعم سكالا جميع مفاهيم البرمجة الوظيفية؟ هل تدعم جافا 8 جميع مفاهيم البرمجة الوظيفية؟
  5. ما هي المزايا الرئيسية للغة سكالا؟ هل هناك عيوب للغة سكالا؟
  6. ما هي العيب الرئيسي للغة سكالا؟
  7. ما هو شعار لغة سكالا؟
  8. ما هي لغات جافا التي أصبحت شائعة على الآلة الظاهرية الآن؟
  9. مثل فئة java.lang.Object في جافا، ما هي الفئة الأم لجميع الفئات في سكالا؟
  10. ما هو المعدل الوصول الافتراضي في سكالا؟ هل سكالا تحتوي على كلمة “public”؟
  11. ما هو “تحليل النوع” في سكالا؟
  12. ما الفرق بين Int في سكالا و java.lang.Integer في جافا؟ ما العلاقة بين Int و RichInt في سكالا؟
  13. ما هو Nothing في سكالا؟ ما هو Nil في سكالا؟ ما العلاقة بين Nothing و Nil في سكالا؟
  14. ما هو Null في سكالا؟ ما هو null في سكالا؟ ما الفرق بين Null و null في سكالا؟
  15. ما هو وحدة في سكالا؟ ما الفرق بين void في جافا ووحدة في سكالا؟
  16. Translated Text:

    ما الفارق بين `val` و `var` في سكالا؟

  17. ما هو REPL في سكالا؟ ما هو استخدام REPL في سكالا؟ كيفية الوصول إلى REPL في سكالا من سطر الأوامر؟
  18. ما هي ميزات سكالا؟
  19. كيف يمكننا تنفيذ حلقات بشكل وظيفي؟ ما الفارق بين حلقات البرمجة الشيئية والبرمجة الوظيفية؟
  20. ما هو “التطبيق” في سكالا أو ما هو تطبيق سكالا؟ ما هو “App” في سكالا؟ ما هو استخدام تطبيق سكالا؟
  21. هل تدعم سكالا تحميل العمليات؟ هل تدعم جافا تحميل العمليات؟
  22. ما هو التعبير؟ ما هو البيان؟ ما هو الفارق بين التعبير والبيان؟
  23. ما الفارق بين “If…Else” في جافا و “If…Else” في سكالا؟
  24. هل سكالا هي لغة قائمة على التعبير أم لغة قائمة على البيان؟ هل جافا هي لغة قائمة على التعبير أم لغة قائمة على البيان؟
  25. قل لي بعض الميزات التي تدعمها جافا ولكن لا تدعمها سكالا والعكس؟
  26. ما الفارق بين الدالة والطريقة في سكالا؟
  27. كم عدد ملفات الفئة العامة يمكن تحديدها في ملف المصدر في سكالا؟
  28. مثل جافا، ما هي الواردات الافتراضية في لغة سكالا؟
  29. كم عدد العمليات الممكنة في سكالا ولماذا؟
  30. ذكر بعض الكلمات الرئيسية المستخدمة بواسطة جافا والتي لا تحتاج إليها سكالا؟ لماذا لا تحتاج سكالا إليها؟
  31. ما هو PreDef في سكالا؟

يرجى الرجوع إلى مشاركتي السابقة لمعرفة المزيد حول البرمجة الوظيفية (انقر فوق هذا الرابط لفتح مشاركتي السابقة).

أسئلة وأجوبة مقابلة سكالا

في هذا القسم، سنختار كل سؤال من القائمة أعلاه ونناقشه بالتفصيل مع أمثلة مناسبة (إذا لزم الأمر). إذا كنت ترغب في فهم هذه المفاهيم بتفصيل مع أمثلة، يرجى قراءة مشاركاتي السابقة في قسم البرامج التعليمية لسكالا.

ما هو سكالا؟ هل هي لغة أم منصة؟ هل تدعم البرمجة الشيئية أو البرمجة الوظيفية؟ من هو والد سكالا؟

سكالا هي اختصار لـ لغة البرمجة قابلة للتوجيه (SCAlable LAnguage). مارتن أودرسكي هو والد سكالا. سكالا هي لغة برمجة متعددة النمط، تدعم كل من المفاهيم البرمجية الموجهة نحو الكائنات والبرمجة الوظيفية. صممت وطورت سكالا بواسطة مارتن أودرسكي. سكالا هي لغة برمجة آمنة من نوع الكائنات والبرمجة الوظيفية، تعمل على الآلة الافتراضية لجافا (JVM). سكالا هي لغة برمجة آمنة من نوع الكائنات والبرمجة الوظيفية المختلطة وتعمل على الآلة الافتراضية لجافا (JVM). سكالا تتميز بنظام قوي وثابت للأنواع. في سكالا، يتم التحقق من جميع الأنواع أثناء عملية الترجمة.

هل سكالا لغة معتمدة على الأنواع بشكل ثابت؟ ما هي اللغة المعتمدة على الأنواع بشكل ثابت وما هي اللغة المعتمدة على الأنواع بشكل ديناميكي؟ ما هو الفرق بين اللغات المعتمدة على الأنواع بشكل ثابت واللغات المعتمدة على الأنواع بشكل ديناميكي؟

نعم ، سكالا هي لغة ذات نمط ثابت. يعني لغة ذات نمط ثابت أن عملية التحقق من النوع تتم في وقت الترجمة بواسطة المترجم وليس في وقت التشغيل. الميزة الرئيسية لهذا النوع من اللغات هي أننا كمطورين يجب أن نهتم بكتابة الشيفرة الصحيحة لتجنب جميع أخطاء وقت الترجمة. نظرًا لأن المترجم يقوم بفحص العديد من الأخطاء في وقت الترجمة ، فإننا لا نواجه الكثير من المشاكل أو الأخطاء في وقت التشغيل. أمثلة: – جافا ، سكالا ، سي ، سي ++ ، هاسكيل وما إلى ذلك. لغة ذات نمط ديناميكي تعني أن عملية التحقق من النوع تتم في وقت التشغيل وليس في وقت الترجمة بواسطة المترجم. نظرًا لأن المترجم لن يقوم بأي عملية تحقق من النوع في وقت الترجمة ، يمكننا توقع المزيد من المشاكل أو الأخطاء في وقت التشغيل. مثال: – جروفي ، جافا سكريبت ، روبي ، بيثون ، سمولتوك وما إلى ذلك.

هل سكالا هي لغة برمجة نقية موجهة للكائنات؟ هل جافا هي لغة برمجة نقية موجهة للكائنات؟

لغة برمجة نقية موجهة للكائنات تعني أن كل شيء يجب أن يكون كائنًا. جافا ليست لغة برمجة نقية موجهة للكائنات لأنها تدعم المفاهيم غير موجهة للكائنات الاتيني:

  • تدعم جافا أنواع البيانات الأولية. ليست كائنات.
  • تدعم جافا الأعضاء الثابتة. ليست ذات صلة بالكائنات.

نعم ، سكالا هي لغة برمجة نقية موجهة للكائنات لأنها في سكالا ، كل شيء هو كائن وكل شيء هو قيمة. الدالات هي قيم والقيم هي كائنات. سكالا ليس لديها أنواع بيانات أولية ولا أعضاء ثابتة.

هل يدعم سكالا جميع مفاهيم البرمجة الوظيفية؟ هل يدعم جافا 8 جميع مفاهيم البرمجة الوظيفية؟

نعم، تدعم سكالا جميع مفاهيم البرمجة الوظيفية. قامت جافا 8 بإدخال بعض البنى للبرمجة الوظيفية، ولكنها لا تدعم جميع مفاهيم البرمجة الوظيفية. على سبيل المثال، لا تدعم جافا 8 مطابقة النمط، والتعويضات ومنها.

ما هي المزايا الرئيسية للغة سكالا؟ هل هناك أي عيوب في لغة سكالا؟

إذا استخدمنا لغة سكالا لتطوير تطبيقاتنا، يمكننا الحصول على الفوائد التالية أو المزايا والعيوب: مزايا لغة سكالا:-

  • كود بسيط وموجز
  • كود تعبيري جداً
  • كود أكثر قراءة
  • لغة آمنة بنسبة 100٪ من نوع
  • لا تغير ولا آثار جانبية
  • كود قابل لإعادة الاستخدام أكثر
  • المزيد من القابلية للتوسيع
  • افعل المزيد بأقل كود
  • بناء جداً في الصياغة
  • يدعم جميع ميزات البرمجة الكائنية
  • يدعم جميع ميزات البرمجة الوظيفية. عملي جداً
  • كود أقل عرضة للأخطاء
  • برمجة متزامنة وتوازي أفضل
  • كود قابل للتوسع والصيانة بشكل عالي
  • إنتاجية عالية
  • تطبيقات موزعة
  • توافق كامل مع جافا
  • توفر لغات تعريف النماذج السكالا القوية
  • REPL لتعلم أساسيات السكالا

عيوب لغة السكالا:-

  • كود أقل قراءة
  • صعوبة في فهم الكود للمبتدئين
  • صياغة معقدة للتعلم
  • توافق قديم أقل

ملاحظة:- يمكننا كتابة كود سكالا بطريقة قراءة أكثر أو أقل.

ما هي العيب الرئيسي للغة السكالا؟

بصرف النظر عن العديد من فوائد Scala ، فإنه يعاني من عيب رئيسي: مشكلة التوافق العكسي. إذا أردنا الترقية إلى أحدث إصدار من Scala ، فإنه يتعين علينا أن نهتم بتغيير بعض أسماء الحزمة وأسماء الفئات وأسماء الطرق أو الدوال وما إلى ذلك. على سبيل المثال ، إذا كنت تستخدم إصدارًا قديمًا من Scala ومشروعك يستخدم تعليق BeanProperty ، فإنه كان متاحًا في “scala.reflect” مثل “scala.reflect.BeanProperty” في الإصدارات القديمة. إذا أردنا الترقية إلى إصدارات Scala الجديدة ، فإنه يتعين علينا تغيير هذه الحزمة من “scala.reflect” إلى “scala.beans”.

ما هو الشعار الرئيسي للغة Scala؟

مثل شعار Java “اكتب مرة واحدة وشغلها في أي مكان” ، فإن Scala لديها شعار “افعل المزيد بأقل” أو “افعل المزيد بأقل قدر من الشيفرة”. “افعل المزيد بأقل” يعني أنه يمكننا تطوير برنامج أو منطق أكثر تعقيدًا بأقل قدر من الشيفرة.

جافا، سكالا، جروفي وكلوجر هي اللغات الأكثر شهرة على منصة تشغيل جافا الافتراضية. تدعم لغات سكالا، جروفي وكلوجر كل من ميزات البرمجة الشيئية وميزات البرمجة الوظيفية على منصة تشغيل جافا الافتراضية. تدعم جافا SE 8 جميع ميزات البرمجة الشيئية. ومع ذلك، فإنها تدعم عدد قليل جدًا من ميزات البرمجة الوظيفية مثل التعبيرات اللامبدا، والوظائف، واستنتاج النوع، والوظائف من الدرجة العليا.

مثل فئة java.lang.Object في جافا، ما هي الفئة الأساسية لجميع الفئات في سكالا؟

كما نعلم في جافا، الفئة الأساسية لجميع الفئات (فئات واجهة برمجة التطبيقات في جافا أو فئات محددة من قبل المستخدم) هي فئة java.lang.Object. وبنفس الطريقة في سكالا، الفئة الأساسية لجميع الفئات أو الصفات هي فئة “أي”. تم تحديد فئة “أي” في حزمة سكالا كـ “scala.Any”.

ما هو المحدد الوصول الافتراضي في سكالا؟ هل لسكالا كلمة مفتاحية “public”؟

في سكالا، إذا لم نذكر أي رقم وصول (access modifier) لطريقة، وظيفة، سمة، كائن أو صف، فإن الرقم الوصول الافتراضي هو “عام” (public). حتى بالنسبة للحقول، “عام” هو الرقم الوصول الافتراضي. بسبب هذه الميزة الافتراضية، لا يوجد لدينا في سكالا كلمة “عام”.

ما هو “تقدير النوع” في سكالا؟

يمكن أن يتم تحديد الأنواع بواسطة مترجم سكالا أثناء وقت الترجمة. يُعرف هذا باسم “تقدير النوع”. الأنواع تعني نوع البيانات أو نوع النتيجة. نستخدم الأنواع في العديد من الأماكن في برامج سكالا مثل أنواع المتغيرات، أنواع الكائنات، أنواع معلمات الطريقة/الوظيفة، أنواع إرجاع الطريقة/الوظيفة، إلخ. ببساطة، تحديد نوع متغير أو تعبير أو كائن إلخ أثناء وقت الترجمة بواسطة المترجم يُعرف باسم “تقدير النوع”.

ما هي الشبهات والاختلافات بين “Int” في سكالا وـ “java.lang.Integer” في جافا؟ ما هي العلاقة بين Int و RichInt في سكالا؟

الشبهات بين “Int” في سكالا وـ “java.lang.Integer” في جافا:

  • كلاهما صنفان.
  • يتم استخدام كلاهما لتمثيل الأعداد الصحيحة.
  • كلاهما عبارة عن أعداد صحيحة بتناثر 32 بت.

الاختلافات بين فئة Int في سكالا وفئة java.lang.Integer في جافا:

  • فئة Int في سكالا لا تنفذ واجهة Comparable.
  • فئة java.lang.Integer في جافا تنفذ واجهة Comparable.

فئة Integer في جافا مشابهة لـ Int في سكالا و RichInt. تعتبر RichInt فئة نهائية معرفة في حزمة scala.runtime مثل “scala.runtime.RichInt”. في سكالا ، العلاقة بين Int و RichInt هي أنه عند استخدام Int في برنامج سكالا ، سيتم تحويله تلقائيًا إلى RichInt للاستفادة من جميع الأساليب المتاحة في تلك الفئة. يمكننا القول أن RichInt هو فئة ضمنية لـ Int. (سنناقش “ما هو الضمني وما هي مزايا الضمني في مشاركتي التالية).

ما هو Nothing في سكالا؟ ما هو Nil في سكالا؟ ما هي العلاقة بين Nothing و Nil في سكالا؟

في سكالا ، Nothing هو نوع (فئة نهائية). يتم تعريفه في أسفل نظام أنواع سكالا ، وهذا يعني أنه فرع فرعي لأي شيء في سكالا. لا توجد أي حالات لـ Nothing. حالات استخدام Nothing في سكالا:- إذا لم يكن لدى Nothing أي حالات ، فمتى نستخدم هذا في تطبيقات سكالا؟

  • Nil يتم تعريفه باستخدام Nothing (انظر أدناه لمثال).
  • تم تعريف None باستخدام Nothing.
object None extends Option[Nothing]
  • يمكننا استخدام Nothing كنوع إرجاع للطرق التي لا تعيد أبدًا.
  • يمكننا استخدام Nothing كنوع إرجاع للطرق التي تنتهي بشكل غير طبيعي.

Nil هو كائن يُستخدم لتمثيل قائمة فارغة. يتم تعريفه في حزمة “scala.collection.immutable” كما هو موضح أدناه:

object Nil extends List[Nothing]

مثال:-

scala> Nil
res5: scala.collection.immutable.Nil.type = List()

scala> Nil.length
res6: Int = 0

ما هو Null في Scala؟ ما هو القيمة null في Scala؟ ما هو الفرق بين Null و null في Scala؟

Null هو نوع (فئة نهائية) في Scala. يتوفر نوع Null في حزمة “scala” باسم “scala.Null”. لديها مثيل واحد ووحيد هو null. في Scala، “null” هو مثيل من نوع scala.Null. مثال:-

scala> val myNullRef : Null = null
myNullRef: Null = null

لا يمكننا تعيين قيم أخرى لمراجع النوع Null. يقبل فقط قيمة ‘null’. Null هو نوع فرعي من جميع أنواع المراجع. Null في قاع النظام النوعي في Scala. لأنه ليس نوعًا فرعيًا من أنواع القيم، يمكننا تعيين “null” إلى أي متغير من نوع القيمة. مثال:-

scala> val myInt : Int = null
:10: error: an expression of type Null is ineligible for implicit conversion
       val myInt : Int = null

^ يوجد هنا خطأ تناسب الأنواع. found: Null(null) ولكن المطلوب: Int. التحويلات الضمنية بين Null و Int غير قابلة للتطبيق لأنها غامضة.

ما هو الوحدة في سكالا؟ ما الفرق بين void في جافا والوحدة في سكالا؟

في سكالا، تُستخدم الوحدة لتمثيل “لا قيمة” أو “لا قيمة مفيدة”. الوحدة هي فئة نهائية معرفة في حزمة “سكالا” وهي “سكالا.Unit”. الوحدة مشابهة إلى حد ما لـ void في جافا. ولكن لديهم بعض الاختلافات.

  • void في جافا لا يحتوي على أي قيمة. إنه لا شيء.
  • الوحدة في سكالا لديها قيمة واحدة ()
  • () هي القيمة الوحيدة والوحيدة من نوع الوحدة في سكالا. ومع ذلك، لا توجد قيم لنوع void في جافا.
  • void في جافا هو كلمة مفتاحية. الوحدة في سكالا هي فئة نهائية.

يُستخدم كل منهما لتمثيل طريقة أو وظيفة لا تعيد أي شيء.

ما هو الفرق بين val و var في سكالا؟

في سكالا، يُستخدم كل من val و var لتعريف المتغيرات. ومع ذلك، لديهم بعض الاختلافات البارزة.

  • var تعني متغير.
  • val تعني قيمة.
  • كما نعلم، المتغير يعني قابل للتغيير والقيمة تعني ثابتة.
  • متغير var يُستخدم لتعريف المتغيرات القابلة للتغيير، مما يعني أنه يمكننا إعادة تعيين القيم بمجرد إنشائها.
  • val يُستخدم لتعريف المتغيرات الثابتة، مما يعني أنه لا يمكننا إعادة تعيين القيم بمجرد إنشائها.
  • في مصطلحات جافا البسيطة، var يعني ‘متغير’ و val يعني ‘متغير نهائي’.

ما هو REPL في سكالا؟ ما هو استخدام REPL في سكالا؟ كيفية الوصول إلى REPL في سكالا من سطر الأوامر CMD؟

يعني REPL Read-Evaluate-Print Loop. يمكننا نطقها ب ‘ريبل’. في سكالا، يعمل REPL كمفسر لتنفيذ كود سكالا من سطر الأوامر. لهذا السبب يُعرف REPL أيضًا باسم واجهة سطر أوامر سكالا (CLI) أو قذيفة سطر أوامر سكالا. الغرض الرئيسي من REPL هو تطوير واختبار مقتطفات صغيرة من كود سكالا لأغراض التدريب. إنه مفيد جدًا للمبتدئين في سكالا لممارسة البرامج الأساسية. يمكننا الوصول إلى REPL باستخدام الأمر “سكالا”. عندما نكتب الأمر “سكالا” في سطر الأوامر، سنحصل على قذيفة REPL حيث يمكننا كتابة وتنفيذ كود سكالا.

D:\> scala

scala>

ما هي ميزات سكالا؟

تدعم لغة سكالا الميزات التالية:

  • تدعم كل من البرمجة بأسلوب البرمجة الشيئية (الأمرية) والبرمجة بأسلوب البرمجة الوظيفية
  • لغة برمجة شيئية نقية
  • تدعم جميع الميزات الوظيفية
  • مفسر REPL (قراءة – تقييم – طباعة – حلقة التكرار)
  • نظام نوع قوي
  • لغة مكتوبة بشكل ثابت
  • استنتاج النوع
  • تدعم مطابقة الأنماط
  • تدعم الإغلاقات
  • تدعم هياكل البيانات الدائمة
  • تستخدم نموذج الممثل لتطوير تطبيقات التوازي
  • قابلة للتشغيل مع جافا
  • متوفرة جميع أدوات التطوير – بيئات التطوير المتكاملة، أدوات البناء، أطُر الويب، إطارات الاختبار التنمية وإطارات اختبار التصميم

كيف يمكننا تنفيذ حلقات برمجية بشكل وظيفي؟ ما هو الفرق بين حلقات البرمجة بأسلوب البرمجة الشيئية والبرمجة الوظيفية؟

نعلم كيفية تنفيذ حلقات برمجية بأسلوب البرمجة الشيئية: باستخدام متغيرات مؤقتة قابلة للتغيير، قم بتحديث قيمة المتغير واستخدم بنى حلقة. إنها طريقة محبطة وغير آمنة. ليست آمنة للمواضيع. يستخدم النمط البرمجي الشيئي الأمرية الآتي لتنفيذ الحلقات:

  • بنى حلقة
  • القابلية للتغيير
  • التأثيرات الجانبية

نحن يمكننا تنفيذ نفس الحلقات بطرق مختلفة في الطريقة الوظيفية. إنه آمن للتداول بالخيوط. يمكننا استخدام تقنيتين التاليتين لتنفيذ الحلقات بأسلوب وظيفي:

  • التكرار
  • التكرار الذيلي
  • عدم التغيير
  • عدم وجود تأثير جانبي

ما هو “التطبيق” في سكالا أو ما هو تطبيق سكالا؟ ما هو “App” في سكالا؟ ما هو استخدام تطبيق سكالا؟

تطبيق سكالا: في سكالا، App هو سمة معرفة في حزمة سكالا مثل “سكالا.آب”. يحدد الأسلوب الرئيسي. إذا قامت كائن أو فئة بتمديد هذه السمة، فسيصبحون برامج Scala التنفيذية تلقائيًا لأنهم سيورثون الأسلوب الرئيسي من التطبيق. الميزة الرئيسية لاستخدام App هي أنه لا نحتاج إلى كتابة الأسلوب الرئيسي. العيب الرئيسي في استخدام App هو أنه يجب علينا استخدام نفس الاسم “args” للإشارة إلى وسيط سطر الأوامر لأن أسلوب main() في scala.App يستخدم هذا الاسم. مثال:- بدون Scala App:

object MyApp {
    def main( args: Array[String]){
        println("Hello World!")
    }
}

مع Scala App:

object MyApp extends App{
   println("Hello World!")
}

إذا لاحظنا في المثالين أعلاه، في المثال الثاني لم نعرف الطريقة الرئيسية لأننا قمنا بالتوريث من Scala App (التطبيق). قبل Scala 2.9، لدينا سمة scala.Application. ولكنها تم استبدالها بواسطة scala.App منذ إصدار Scala 2.9.

هل يدعم سكالا تحميل العوامل؟ هل يدعم جافا تحميل العوامل؟

جافا لا تدعم تحميل العوامل. سكالا تدعم تحميل العوامل. السبب هو أن جافا لا تريد دعم بعض أسماء الأساليب المضللة مثل “+* /”. سكالا قدمت هذه المرونة للمطور ليقرر أي أسماء الأساليب/الوظائف يجب استخدامها. عندما نقوم بالاتصال بـ 2 + 3 هذا يعني أن “+” ليس عاملاً، بل هو أسلوب متاح في فئة Int (أو نوعه الضمني). داخلياً، يتم تحويل هذا الاستدعاء إلى “2.+(3)“.

ما هو التعبير؟ ما هي البيان؟ ما الفرق بين التعبير والبيان؟

التعبير: التعبير هو قيمة تعني أنه سيتم تقييمها إلى قيمة. بما أن التعبير يرجع قيمة، يمكننا تعيينه إلى متغير. مثال: – شرط Scala، مشغل التكرار في Java. البيان: البيان يحدد إجراءات أو عمليات واحدة أو أكثر. وهذا يعني أن البيان ينفذ الإجراءات. لأنه لا يعيد قيمة، لا يمكننا تعيينه إلى متغير. مثال: – شرط If في Java.

ما الفرق بين “If…Else” في Java و “If…Else” في Scala؟

“If…Else” في Java: في Java، “If…Else” هو بيان، ليس تعبيراً. لا يعيد قيمة ولا يمكن تعيينه إلى متغير. مثال: –

 int year;
 if( count == 0) 
   year = 2014;
 else 
   year = 2015;

“If…Else” في Scala: في Scala، “If…Else” هو تعبير. يقوم بتقييم قيمة أي يعيد قيمة. يمكننا تعيينه إلى متغير.

 val year = if( count == 0) 2014 else 2015

**ملحوظة:-** “If…Else” في Scala يعمل مثل مشغل التكرار في Java. يمكننا استخدام “If…Else” في Scala مثل “If…Else” في Java كما هو موضح أدناه:

 val year = 0
 if( count == 0) 
   year = 2014 
 else 
   year = 2015

هل سكالا لغة قائمة على التعبيرات أم على التعليمات؟ هل جافا لغة قائمة على التعبيرات أم على التعليمات؟

في سكالا، كل شيء قيمة. جميع التعبيرات أو التعليمات تقوم بتقييم الى قيمة. يمكننا تعيين التعبير، الوظيفة، الإغلاق، الكائن وما إلى ذلك إلى متغير. لذلك، سكالا هي لغة مبنية على التعبيرات. في جافا، التعليمات ليست تعابير أو قيم. لا يمكننا تعيينها إلى متغير. لذلك، جافا ليست لغة مبنية على التعبيرات. إنها لغة قائمة على التعليمات.

قل لي بعض الميزات التي يدعمها جافا ولكن لا تدعمها سكالا والعكس صحيح؟

  • جافا لا تدعم تحميل العمليات، ولكن سكالا تدعم ذلك.
  • جافا تدعم المشغلات ++ و ، ولكن سكالا لا تدعمها.
  • جافا لديها استثناءات تحققت وغير تحققت، ولكن سكالا ليس لديها استثناءات تحققت.
  • سكالا لا تدعم تعليمات الكسر والاستمرارية، لكن جافا تستخدمها.
  • سكالا ليس لديها تحويل نوع صريح، لكن جافا تدعم هذه الميزة.
  • سكالا تدعم مطابقة الأنماط، لكن جافا لا تدعمها.
  • جافا تستخدم أنواع البيانات الأساسية، لكن سكالا ليس لديها.
  • جافا تدعم الأعضاء الثابتة، لكن سكالا ليس لديها مفهوم الأعضاء الثابتة.
  • سكالا تدعم الضمائر والصفات، بينما جافا لا تدعمهما.

**ملاحظة:-** هذه القائمة تتجاوز صفحة واحدة. ومع ذلك، هذه بعض النقاط المهمة لتذكر الفروق في ميزات سكالا وجافا لمواجهة مقابلات سكالا.

ما هو الفرق بين الدالة والطريقة في سكالا؟

سكالا تدعم كلا الدوال والطرق. نستخدم نفس الصيغة لتعريف الدوال والطرق، لا يوجد فرق في الصيغة. ومع ذلك، لديهم فرق طفيف:

  • يمكننا تعريف طريقة في فئة أو صفة سكالا. الطريقة مرتبطة بكائن (مثيل من الفئة). يمكننا استدعاء الطريقة باستخدام مثيل من الفئة. لا يمكننا استخدام طريقة سكالا مباشرة دون استخدام كائن.
  • الدالة ليست مرتبطة بفئة أو صفة. تم تعريفها في حزمة سكالا. يمكننا الوصول إلى الدوال دون استخدام الكائنات، مثل الدوال الثابتة في جافا.

ملاحظة:- سنناقش الفصل، والسمة، والحزمة، والكائن، وما إلى ذلك في مشاركاتي القادمة.

كم عدد ملفات الفصل العامة الممكنة لتحديدها في ملف مصدر Scala؟

في جافا، يمكننا تحديد ملف عام واحد على الأكثر في ملف مصدر واحد. على عكس جافا، يدعم سكالا عدة فصول عامة في نفس ملف المصدر. يمكننا تحديد أي عدد من الفصول العامة/الواجهات/السمات في ملف مصدر Scala.

مثل جافا، ما هي الواردات الافتراضية في لغة سكالا؟

نحن نعلم، أن جافا.لانغ هي الحزمة الافتراضية المستوردة إلى جميع البرامج في جافا تلقائياً بواسطة الآلة الظاهرية. لا نحتاج إلى استيراد هذه الحزمة بوضوح. بنفس الطريقة، يتوفر الواردات الافتراضية التالية في جميع برامج سكالا:

  • حزمة جافا.لانغ
  • حزمة سكالا
  • سكالا.بريديف

كم عدد العمليات في سكالا ولماذا؟

على عكس جافا ومثل C++، تدعم سكالا التحميل الزائد للعوامل. سكالا لديها عامل وحيد فقط وهو عامل “=” (المساواة). باستثناء هذا، جميعها أساليب فقط. على سبيل المثال 2 + 3، هنا “+” ليس عاملًا في سكالا. “+” هو أسلوب متاح في فئة Int. يلاحظ مترجم سكالا أن 2 و 3 هما أعداد صحيحة ويحاول العثور على أسلوب “+” في فئة Int. لذا يحول مترجم سكالا التعبير “2 + 3” إلى “2.+(3)” ويقوم بالاتصال بأسلوب “+” على كائن العدد الصحيح “2” ويمرر كائن العدد الصحيح “3” كمعلمة إلى أسلوب “+”. كل من “2 + 3” و “2.+(3)” هما متساويان. إنها مجرد “سكالا” سكر بناء لكتابة البرامج بأسلوب وظيفي.

ذكر بعض الكلمات الرئيسية المستخدمة في جافا والتي لا تحتاج إليها في سكالا؟ لماذا لا تحتاج سكالا إليها؟

تستخدم جافا الكلمات الرئيسية التالية بشكل واسع:

  • الكلمة الرئيسية ‘public’ – لتعريف الفئات، والواجهات، والمتغيرات، إلخ.
  • الكلمة الرئيسية ‘static’ – لتعريف الأعضاء الثابتة.

لا يتطلب سكالا هاتين الكلمتين. سكالا ليس لديها كلمتين ‘public’ و ‘static’.

  • في سكالا ، المحدد الافتراضي للوصول هو ‘public’ للفئات والواجهات والأساليب / الوظائف والحقول وما إلى ذلك. ولهذا السبب ، لا يلزم استخدام الكلمة ‘public’.
  • لدعم مبادئ البرمجة الكائنية ، تجنب فريق سكالا استخدام الكلمة ‘static’. ولهذا السبب ، سكالا هي لغة برمجة كائنية نقية. من الصعب جدًا التعامل مع الأعضاء الثابتة في تطبيقات التوازن.

h3>ما هو PreDef في سكالا؟ ما هو الهدف الرئيسي لـ PreDef في سكالا؟ في سكالا ، PreDef هو كائن معرف في حزمة سكالا بوصفه “scala.PreDef”. إنه كائن مفيد. يحدد العديد من طرق الأداة كما هو موضح أدناه:

  • إدخال وإخراج وحدة التحكم (طباعة ، طباعة سطر جديد ، إلخ)
  • طرق أداة المجموعة
  • طرق أداة السلسلة
  • طرق تحويل ضمنية
  • طرق أداة التأكيد إلخ.

على سبيل المثال ، يتم تعريف الطرق print ، println ، readLine ، readInt ، require إلخ في كائن PreDef. في سكالا ، يتم توفير PreDef لاستخدام طرقها بدون استيرادها في جميع برامج سكالا لأن مترجم سكالا يقوم بتوفير هذا الكائن في جميع وحدات الترجمة مثل الفئة والكائن والواجهة وما إلى ذلك تلقائيًا. هذا كل شيء عن “أسئلة وأجوبة أساسية حول سكالا”. سنناقش بعض أسئلة وأجوبة سكالا المتوسطة والمتقدمة وفي الوقت الحقيقي في مشاركاتي القادمة. يرجى ترك تعليق إذا أعجبك المنشور أو إذا كان لديك أي مشاكل / اقتراحات.

Source:
https://www.digitalocean.com/community/tutorials/scala-interview-questions-answers