في الدروس التطبيقية حول الترميز في هذا المسار، ستنشئ تطبيقًا على Android باسم Dice Roller. وعندما "يرمي المستخدم النرد"، سيتم إنشاء نتيجة عشوائية. تأخذ النتيجة في الاعتبار عدد أوجه النرد. على سبيل المثال، يمكن الحصول على القيم من 1 إلى 6 فقط من نرد ذي 6 أوجه.
هذا هو الشكل النهائي للتطبيق.
لمساعدتك في التركيز على مفاهيم البرمجة الجديدة لهذا التطبيق، ستستخدم أداة برمجة Kotlin المستندة إلى المتصفّح لإنشاء وظائف التطبيق الأساسية. سيُخرج البرنامج النتائج إلى وحدة التحكّم. ستنفّذ واجهة المستخدم لاحقًا في Android Studio.
في هذا الدرس العملي الأول، ستنشئ برنامج Kotlin يحاكي رمي النرد ويعرض رقمًا عشوائيًا، تمامًا كما يفعل النرد.
المتطلبات الأساسية
- كيفية فتح الرمز البرمجي وتعديله وتشغيله في https://try.kotlinlang.org/
- إنشاء برنامج Kotlin يستخدم المتغيرات والدوال ويعرض نتيجة في وحدة التحكّم وتشغيله
- يمكنك تنسيق الأرقام داخل النص باستخدام نموذج سلسلة مع الرمز
${variable}
.
أهداف الدورة التعليمية
- كيفية إنشاء أرقام عشوائية آليًا لمحاكاة رميات النرد
- كيفية تنظيم الرمز البرمجي من خلال إنشاء فئة
Dice
تتضمّن متغيّرًا ودالة - كيفية إنشاء مثيل كائن لفئة وتعديل متغيراته واستدعاء طُرقها
ما ستنشئه
- برنامج Kotlin في أداة البرمجة المستندة إلى المتصفّح في Kotlin يمكنه تنفيذ رمية نرد عشوائية.
ما تحتاج إليه
- جهاز كمبيوتر متصل بالإنترنت
تتضمّن الألعاب غالبًا عنصرًا عشوائيًا. يمكنك الحصول على جائزة عشوائية أو التقدّم بعدد عشوائي من الخطوات على لوحة الألعاب. في حياتك اليومية، يمكنك استخدام أرقام وأحرف عشوائية لإنشاء كلمات مرور أكثر أمانًا.
بدلاً من رمي النرد الفعلي، يمكنك كتابة برنامج يحاكي رمي النرد نيابةً عنك. في كل مرة يتم فيها رمي النرد، يمكن أن تكون النتيجة أي رقم ضمن نطاق القيم المحتملة. لحسن الحظ، ليس عليك إنشاء مولّد أرقام عشوائية خاص بك لمثل هذا البرنامج. تتضمّن معظم لغات البرمجة، بما في ذلك Kotlin، طريقة مدمجة تتيح لك إنشاء أرقام عشوائية. في هذه المهمة، ستستخدم رمز Kotlin البرمجي لإنشاء رقم عشوائي.
إعداد الرمز الأوّلي
- في المتصفّح، افتح الموقع الإلكتروني https://try.kotlinlang.org/.
- احذف كل الرموز الحالية في أداة تعديل الرموز واستبدِلها بالرمز أدناه. هذه هي الدالة
main()
التي عملت عليها في دروس تطبيقية سابقة حول الترميز (راجِع الدرس التطبيقي حول الترميز كتابة برنامجك الأول في Kotlin).
fun main() {
}
استخدام الدالة العشوائية
لرمي النرد، تحتاج إلى طريقة لتمثيل جميع قيم رمي النرد الصالحة. بالنسبة إلى النرد العادي ذي 6 أوجه، فإنّ رميات النرد المقبولة هي: 1 و2 و3 و4 و5 و6.
في السابق، تعرّفت على أنواع البيانات، مثل Int
للأعداد الصحيحة وString
للنصوص. IntRange
هو نوع آخر من البيانات، وهو يمثّل نطاقًا من الأعداد الصحيحة من نقطة بداية إلى نقطة نهاية. IntRange
هو نوع بيانات مناسب لتمثيل القيم المحتملة التي يمكن أن ينتجها رمي النرد.
- داخل الدالة
main()
، عرِّف متغيّرًا على أنّهval
باسمdiceRange
. عيِّنها إلىIntRange
من 1 إلى 6، ما يمثّل نطاق الأعداد الصحيحة التي يمكن أن تظهر عند رمي نرد سداسي الأوجه.
val diceRange = 1..6
يمكنك معرفة أنّ 1..6
هو نطاق Kotlin لأنّه يتضمّن رقم بداية ونقطتَين متبوعتَين برقم نهاية (بدون مسافات بينهما). من الأمثلة الأخرى على نطاقات الأعداد الصحيحة 2..5
للأعداد من 2 إلى 5، و100..200
للأعداد من 100 إلى 200.
على غرار الطريقة التي يؤدي بها استدعاء println()
إلى توجيه النظام لطباعة النص المحدّد، يمكنك استخدام دالة تُسمى random()
لإنشاء رقم عشوائي وعرضه لك ضمن نطاق محدّد. كما كان من قبل، يمكنك تخزين النتيجة في متغيّر.
- داخل
main()
، حدِّد متغيّرًا كـval
باسمrandomNumber
. - اجعل
randomNumber
يساوي نتيجة استدعاءrandom()
على النطاقdiceRange
، كما هو موضّح أدناه.
val randomNumber = diceRange.random()
لاحظ أنّك تستدعي random()
على diceRange
باستخدام نقطة بين المتغيّر واستدعاء الدالة. يمكنك قراءة ذلك على أنّه "إنشاء رقم عشوائي من diceRange
". ثم يتم تخزين النتيجة في المتغيّر randomNumber
.
- للاطّلاع على الرقم الذي تم إنشاؤه عشوائيًا، استخدِم ترميز تنسيق السلسلة (يُعرف أيضًا باسم "نموذج السلسلة")
${randomNumber}
لطباعته، كما هو موضّح أدناه.
println("Random number: ${randomNumber}")
يجب أن تبدو التعليمات البرمجية المكتملة على النحو التالي.
fun main() {
val diceRange = 1..6
val randomNumber = diceRange.random()
println("Random number: ${randomNumber}")
}
- نفِّذ الرمز البرمجي عدة مرات. في كل مرة، من المفترض أن يظهر لك الناتج على النحو التالي، مع أرقام عشوائية مختلفة.
Random number: 4
عندما ترمي النرد، تكون هذه العناصر حقيقية في يدك. على الرغم من أنّ الرمز الذي كتبته للتو يعمل بشكل جيد تمامًا، من الصعب تخيّل أنّه يتعلق بنرد حقيقي. إنّ تنظيم البرنامج ليكون مشابهًا للعناصر التي يمثّلها يسهّل فهمه. لذا، سيكون من الرائع أن يكون لديك نرد قابل للبرمجة يمكنك رميه!
تعمل جميع النردات بالطريقة نفسها بشكل أساسي. لديهما الخصائص نفسها، مثل الجوانب، ولهما السلوك نفسه، مثل إمكانية التدحرج. في Kotlin، يمكنك إنشاء مخطط برمجي لنرد يوضح أنّ النرد له أوجه ويمكنه عرض رقم عشوائي. يُطلق على هذا المخطط اسم فئة.
من هذه الفئة، يمكنك بعد ذلك إنشاء كائنات نرد فعلية، تُعرف باسم مثيلات الكائنات. على سبيل المثال، يمكنك إنشاء نرد بـ 12 وجهًا أو 4 وجوه.
تحديد فئة Dice
في الخطوات التالية، ستحدّد فئة جديدة باسم Dice
لتمثيل نرد قابل للدحرجة.
- للبدء من جديد، امحِ الرمز في الدالة
main()
لكي ينتهي بك الأمر بالرمز كما هو موضّح أدناه.
fun main() {
}
- أسفل الدالة
main()
، أضِف سطرًا فارغًا، ثم أضِف رمزًا لإنشاء الفئةDice
. كما هو موضّح أدناه، ابدأ بالكلمة الرئيسيةclass
، متبوعة باسم الفئة، ثمّ قوسين معقوفين مفتوحًا ومغلقًا. اترك مساحة بين الأقواس المتعرجة لوضع الرمز الخاص بالفئة.
class Dice {
}
داخل تعريف الفئة، يمكنك تحديد خاصية واحدة أو أكثر للفئة باستخدام المتغيرات. يمكن أن يكون للزهر الحقيقي عدد من الجوانب أو لون أو وزن. في هذه المهمة، ستركز على سمة عدد أوجه النرد.
- داخل الفئة
Dice
، أضِفvar
باسمsides
لعدد الجوانب التي ستحتوي عليها النرد. اضبط قيمةsides
على 6.
class Dice {
var sides = 6
}
انتهيت! لديك الآن فئة بسيطة جدًا تمثّل النرد.
إنشاء مثيل لفئة Dice
باستخدام فئة Dice
، يمكنك الحصول على مخطط لماهية النرد. وللحصول على نرد فعلي في برنامجك، عليك إنشاء مثيل كائن Dice
. (وإذا كنت بحاجة إلى ثلاث نردات، عليك إنشاء ثلاث مثيلات كائنات).
- لإنشاء مثيل كائن من
Dice
، في الدالةmain()
، أنشئval
باسمmyFirstDice
واضبطه كنسخة من الفئةDice
. لاحظ الأقواس بعد اسم الفئة، والتي تشير إلى أنّك بصدد إنشاء مثيل كائن جديد من الفئة.
fun main() {
val myFirstDice = Dice()
}
بعد أن أصبح لديك عنصر myFirstDice
، وهو عنصر مصنوع من المخطط، يمكنك الوصول إلى سماته. السمة الوحيدة لـ Dice
هي sides
. يمكنك الوصول إلى سمة باستخدام "النقطة". للوصول إلى السمة sides
الخاصة بالعنصر myFirstDice
، عليك استدعاء myFirstDice.sides
التي تُلفظ "myFirstDice
نقطة sides
".
- أسفل تعريف
myFirstDice
، أضِف عبارةprintln()
لعرض عددsides
منmyFirstDice.
println(myFirstDice.sides)
يجب أن تبدو التعليمات البرمجية على النحو التالي.
fun main() {
val myFirstDice = Dice()
println(myFirstDice.sides)
}
class Dice {
var sides = 6
}
- شغِّل برنامجك، وسيعرض عدد
sides
المحدّد في فئةDice
.
6
لديك الآن صف Dice
ونرد حقيقي myFirstDice
يحتوي على 6 sides
.
لنرمي النرد!
رمي النرد
لقد استخدمت سابقًا دالة لتنفيذ إجراء طباعة طبقات الكعكة. رمي النرد هو أيضًا إجراء يمكن تنفيذه كدالة. وبما أنّه يمكن رمي جميع النرد، يمكنك إضافة دالة لذلك داخل فئة Dice
. تُعرف الدالة المعرَّفة داخل فئة أيضًا باسم طريقة.
- في الفئة
Dice
، أسفل المتغيّرsides
، أدرِج سطرًا فارغًا ثم أنشئ دالة جديدة لرمي النرد. ابدأ بكلمة Kotlin الأساسيةfun
، متبوعة باسم الطريقة، ثم قوسين()
، ثم قوسين معقوفين مفتوحين ومغلقين{}
. يمكنك ترك سطر فارغ بين الأقواس المتعرجة لإتاحة مساحة لمزيد من الرموز، كما هو موضّح أدناه. يجب أن يبدو صفّك على النحو التالي.
class Dice {
var sides = 6
fun roll() {
}
}
عند رمي نرد سداسي الأوجه، ينتج رقم عشوائي بين 1 و6.
- داخل طريقة
roll()
، أنشئval randomNumber
. خصِّص له رقمًا عشوائيًا في النطاق1..6
. استخدِم طريقة النقطة لاستدعاءrandom()
في النطاق.
val randomNumber = (1..6).random()
- بعد إنشاء الرقم العشوائي، اطبع الرقم في وحدة التحكّم. يجب أن تبدو طريقة
roll()
المكتملة على النحو الموضّح أدناه.
fun roll() {
val randomNumber = (1..6).random()
println(randomNumber)
}
- لتنفيذ عملية طرح
myFirstDice
فيmain()
، استدعِ الدالةroll()
علىmyFirstDice
. يمكنك استدعاء طريقة باستخدام "تدوين النقطة". لذلك، لاستدعاء الطريقةroll()
منmyFirstDice
، عليك كتابةmyFirstDice.roll()
التي تُلفظ "myFirstDice
نقطةroll()
".
myFirstDice.roll()
يجب أن تبدو التعليمات البرمجية المكتملة على النحو التالي.
fun main() {
val myFirstDice = Dice()
println(myFirstDice.sides)
myFirstDice.roll()
}
class Dice {
var sides = 6
fun roll() {
val randomNumber = (1..6).random()
println(randomNumber)
}
}
- شغِّل الرمز البرمجي. من المفترض أن تظهر لك نتيجة رمية نرد عشوائية أسفل عدد الأوجه. نفِّذ الرمز البرمجي عدة مرات، ولاحظ أنّ عدد الجوانب يظل كما هو، وتتغير قيمة رمية النرد.
6 4
تهانينا! لقد حدّدت Dice
فئة تحتوي على sides
متغيّر وroll()
دالة. في الدالة main()
، أنشأت مثيلاً جديدًا للعنصر Dice
، ثم استدعيت الطريقة roll()
عليه لإنتاج رقم عشوائي.
في الوقت الحالي، أنت تطبع قيمة randomNumber
في الدالة roll()
، وهذا يعمل بشكل رائع. ولكن في بعض الأحيان، يكون من المفيد أكثر عرض نتيجة دالة في أي مكان تم استدعاء الدالة منه. على سبيل المثال، يمكنك تعيين نتيجة طريقة roll()
إلى متغيّر، ثم تحريك لاعب بهذا المبلغ. لنرى كيف يتم ذلك.
- في
main()
، عدِّل السطر الذي يتضمّنmyFirstDice.roll()
. أنشئval
باسمdiceRoll
. اضبطه على القيمة التي تعرضها الطريقةroll()
.
val diceRoll = myFirstDice.roll()
لن يؤدي ذلك إلى تنفيذ أي إجراء بعد، لأنّ roll()
لا يعرض أي نتائج بعد. لكي يعمل هذا الرمز على النحو المنشود، يجب أن تعرض الدالة roll()
نتيجة.
في دروس سابقة، تعلّمت أنّه عليك تحديد نوع بيانات لوسيطات الإدخال في الدوال. وبالطريقة نفسها، عليك تحديد نوع البيانات التي تعرضها الدالة.
- غيِّر الدالة
roll()
لتحديد نوع البيانات التي سيتم عرضها. في هذه الحالة، يكون الرقم العشوائيInt
، لذا يكون نوع القيمة المعروضة هوInt
. تكون صيغة تحديد نوع القيمة المعروضة على النحو التالي: بعد اسم الدالة، وبعد الأقواس، أضِف نقطتين رأسيتين، ثم مسافة، ثم الكلمة الأساسيةInt
لنوع القيمة المعروضة للدالة. من المفترض أن يظهر تعريف الدالة على النحو الموضّح أدناه.
fun roll(): Int {
- نفِّذ هذا الرمز. سيظهر لك خطأ في عرض المشاكل. يقول:
A ‘return' expression is required in a function with a block body.
لقد غيّرت تعريف الدالة لعرض Int
، ولكن النظام يشتكي من أنّ
لا يعرض الرمز Int
فعليًا. يشير "نص الكتلة" أو "نص الدالة" إلى الرمز البرمجي بين الأقواس المتعرجة للدالة. يمكنك إصلاح هذا الخطأ من خلال عرض قيمة من دالة باستخدام عبارة return
في نهاية نص الدالة.
- في
roll()
، أزِل عبارةprintln()
واستبدِلها بعبارةreturn
لـrandomNumber
. يجب أن تبدو الدالةroll()
على النحو الموضّح في الرمز البرمجي أدناه.
fun roll(): Int {
val randomNumber = (1..6).random()
return randomNumber
}
- في
main()
، أزِل عبارة الطباعة الخاصة بجوانب النرد. - أضِف عبارة لطباعة قيمة
sides
وdiceRoll
في جملة إعلامية. يجب أن تبدو دالةmain()
المكتملة مشابهة للرمز البرمجي أدناه.
fun main() {
val myFirstDice = Dice()
val diceRoll = myFirstDice.roll()
println("Your ${myFirstDice.sides} sided dice rolled ${diceRoll}!")
}
- نفِّذ الرمز البرمجي، ويجب أن تكون النتيجة على النحو التالي.
Your 6 sided dice rolled 4!
في ما يلي جميع الرموز التي كتبتها حتى الآن.
fun main() {
val myFirstDice = Dice()
val diceRoll = myFirstDice.roll()
println("Your ${myFirstDice.sides} sided dice rolled ${diceRoll}!")
}
class Dice {
var sides = 6
fun roll(): Int {
val randomNumber = (1..6).random()
return randomNumber
}
}
لا تحتوي بعض النردات على 6 أوجه. تتوفّر النردات بأشكال وأحجام مختلفة: 4 أو 8 أو حتى 120 وجهًا.
- في الفئة
Dice
، ضمن الطريقةroll()
، غيِّر1..6
المرمّز ثابتًا لاستخدامsides
بدلاً من ذلك، حتى يكون النطاق، وبالتالي الرقم العشوائي الذي تم طرحه، مناسبًا دائمًا لعدد الجوانب.
val randomNumber = (1..sides).random()
- في الدالة
main()
، غيِّر قيمةsides
من myFirstDice
إلى 20، وذلك أسفل عملية طباعة رمية النرد وبعدها.
myFirstDice.sides = 20
- انسخ عبارة الطباعة الحالية أدناه والصقها بعد المكان الذي غيّرت فيه عدد الجوانب.
- استبدِل طباعة
diceRoll
بطباعة نتيجة استدعاء الطريقةroll()
علىmyFirstDice
.
println("Your ${myFirstDice.sides} sided dice has rolled a ${myFirstDice.roll()}!")
يجب أن يبدو برنامجك على النحو التالي.
fun main() {
val myFirstDice = Dice()
val diceRoll = myFirstDice.roll()
println("Your ${myFirstDice.sides} sided dice rolled ${diceRoll}!")
myFirstDice.sides = 20
println("Your ${myFirstDice.sides} sided dice rolled ${myFirstDice.roll()}!")
}
class Dice {
var sides = 6
fun roll(): Int {
val randomNumber = (1..sides).random()
return randomNumber
}
}
- شغِّل برنامجك وسيظهر لك رسالة خاصة بالنرد ذي 6 أوجه، ورسالة ثانية خاصة بالنرد ذي 20 وجهًا.
Your 6 sided dice rolled 3! Your 20 sided dice rolled 15!
فكرة الفئة هي تمثيل شيء، غالبًا ما يكون شيئًا ماديًا في العالم الحقيقي. في هذه الحالة، يمثّل الصف Dice
نردًا ماديًا. في العالم الحقيقي، لا يمكن تغيير عدد أوجه النرد. إذا كنت تريد عددًا مختلفًا من الأوجه، عليك الحصول على نرد مختلف. من الناحية البرمجية، يعني هذا أنّه بدلاً من تغيير سمة الجوانب في مثيل كائن Dice
حالي، عليك إنشاء مثيل كائن نرد جديد يتضمّن عدد الجوانب الذي تحتاجه.
في هذه المهمة، ستعدّل الفئة Dice
لتتمكّن من تحديد عدد الأضلاع عند إنشاء مثيل جديد. غيِّر تعريف الفئة Dice
لقبول وسيطة لعدد الأضلاع. وهذا يشبه الطريقة التي يمكن أن تقبل بها الدالة وسيطات للإدخال.
- عدِّل تعريف الفئة
Dice
لقبول وسيطة عدد صحيح باسمnumSides
. لا يتغيّر الرمز داخل صفك.
class Dice(val numSides: Int) {
// Code inside does not change.
}
- داخل الفئة
Dice
، احذف المتغيّرsides
، إذ يمكنك الآن استخدامnumSides
. - عليك أيضًا إصلاح النطاق لاستخدام
numSides
.
يجب أن تبدو فئة Dice
على النحو التالي.
class Dice (val numSides: Int) {
fun roll(): Int {
val randomNumber = (1..numSides).random()
return randomNumber
}
}
إذا نفّذت هذا الرمز، ستظهر لك الكثير من الأخطاء، لأنّ عليك تعديل main()
ليتوافق مع التغييرات التي أُجريت على الفئة Dice
.
- في
main()
، لإنشاءmyFirstDice
بستة جوانب، يجب الآن تمرير عدد الجوانب كمعلَمة إلى فئةDice
، كما هو موضّح أدناه.
val myFirstDice = Dice(6)
- في عبارة الطباعة، غيِّر
sides
إلىnumSides
. - بعد ذلك، احذف الرمز الذي يغيّر
sides
إلى 20، لأنّ هذا المتغيّر لم يعُد موجودًا. - احذف عبارة
println
التي تظهر تحتها أيضًا.
من المفترض أن تبدو الدالة main()
على النحو الموضّح أدناه، وإذا شغّلتها، لن تظهر أي أخطاء.
fun main() {
val myFirstDice = Dice(6)
val diceRoll = myFirstDice.roll()
println("Your ${myFirstDice.numSides} sided dice rolled ${diceRoll}!")
}
- بعد طباعة رمية النرد الأولى، أضِف رمزًا برمجيًا لإنشاء وطباعة كائن
Dice
ثانٍ باسمmySecondDice
يحتوي على 20 وجهًا.
val mySecondDice = Dice(20)
- أضِف عبارة طباعة تعمل على تدوير القيمة المعروضة وطباعتها.
println("Your ${mySecondDice.numSides} sided dice rolled ${mySecondDice.roll()}!")
- يجب أن تبدو دالة
main()
المكتملة على النحو التالي.
fun main() {
val myFirstDice = Dice(6)
val diceRoll = myFirstDice.roll()
println("Your ${myFirstDice.numSides} sided dice rolled ${diceRoll}!")
val mySecondDice = Dice(20)
println("Your ${mySecondDice.numSides} sided dice rolled ${mySecondDice.roll()}!")
}
class Dice (val numSides: Int) {
fun roll(): Int {
val randomNumber = (1..numSides).random()
return randomNumber
}
}
- شغِّل البرنامج المكتمل، ويجب أن تبدو مخرجاتك على النحو التالي.
Your 6 sided dice rolled 5! Your 20 sided dice rolled 7!
عند كتابة الرمز البرمجي، من الأفضل أن يكون موجزًا. يمكنك التخلّص من المتغيّر randomNumber
وعرض الرقم العشوائي مباشرةً.
- غيِّر عبارة
return
لعرض الرقم العشوائي مباشرةً.
fun roll(): Int {
return (1..numSides).random()
}
في عبارة الطباعة الثانية، وضعت طلب الحصول على الرقم العشوائي في نموذج السلسلة. يمكنك التخلّص من المتغيّر diceRoll
من خلال تنفيذ الإجراء نفسه في عبارة الطباعة الأولى.
- استدعِ الدالة
myFirstDice.roll()
في نموذج السلسلة واحذف المتغيّرdiceRoll
. يبدو السطران الأولان من رمز main() البرمجي الآن على النحو التالي.
val myFirstDice = Dice(6)
println("Your ${myFirstDice.numSides} sided dice rolled ${myFirstDice.roll()}!")
- نفِّذ الرمز البرمجي، ولن يكون هناك أي اختلاف في الناتج.
هذا هو الرمز النهائي بعد إعادة هيكلته .
fun main() {
val myFirstDice = Dice(6)
println("Your ${myFirstDice.numSides} sided dice rolled ${myFirstDice.roll()}!")
val mySecondDice = Dice(20)
println("Your ${mySecondDice.numSides} sided dice rolled ${mySecondDice.roll()}!")
}
class Dice (val numSides: Int) {
fun roll(): Int {
return (1..numSides).random()
}
}
fun main() {
val myFirstDice = Dice(6)
val diceRoll = myFirstDice.roll()
println("Your ${myFirstDice.numSides} sided dice rolled ${diceRoll}!")
val mySecondDice = Dice(20)
println("Your ${mySecondDice.numSides} sided dice rolled ${mySecondDice.roll()}!")
}
class Dice (val numSides: Int) {
fun roll(): Int {
return (1..numSides).random()
}
}
- استخدِم الدالة
random()
علىIntRange
لإنشاء رقم عشوائي:(1..6).random()
- الفئات تشبه مخططًا للكائن. ويمكن أن تتضمّن خصائص وسلوكيات يتم تنفيذها كمتغيّرات ودوال.
- يمثّل مثيل الفئة كائنًا، وغالبًا ما يكون كائنًا ماديًا، مثل النرد. يمكنك استدعاء الإجراءات على العنصر وتغيير سماته.
- يمكنك تمرير إدخال إلى فئة عند إنشاء مثيل من خلال تحديد وسيط لتعريف الفئة. على سبيل المثال:
class Dice(val numSides: Int)
ثم إنشاء مثيل باستخدامDice(6)
. - يمكن أن تُرجع الدوال قيمة. حدِّد نوع البيانات المطلوب إرجاعه في تعريف الدالة، واستخدِم عبارة
return
في نص الدالة لإرجاع قيمة. على سبيل المثال:fun example(): Int { return 5 }
يُرجى اتّباع الخطوات التالية:
- امنح فئة
Dice
سمة لون أخرى وأنشئ عدة مثيلات من النرد بأعداد مختلفة من الجوانب والألوان. - أنشئ
Coin
فئة، وامنحها القدرة على قلب العملات المعدنية، وأنشئ مثيلاً للفئة واقلب بعض العملات المعدنية. كيف يمكنك استخدام الدالة random() مع نطاق لإجراء عملية قلب العملة؟