مرآب السيارات
جزء من قسم البرمجة كائنية التوجه في رحلة Kotlin على Coddy. الدرس 55 من 57.
التحدي
صعبأنشئ مرأبًا للسيارات.
- يحتوي
enumSizeعلىSMALLوMEDIUMوLARGEبهذا الترتيب، ولكل منهاlabelبأحرف صغيرة. -
Vehicle(plate)هوsealed classيحتوي على الخاصيتين المجردتينsizeوhourlyRate. يكونMotorbikeصغيرًا (1 لكل ساعة)، وCarمتوسطًا (3)، وVanكبيرًا (5). - يُنشأ
Garage(small, medium, large)باستخدام عدد الأماكن لكل حجم. تضعpark(vehicle)المركبة في مكان شاغر من حجمها، أو، إذا لم يوجد، في المكان التالي الأكبر حجمًا الذي يتوفر فيه مكان، وتُرجعparked AB12 in mediumأوfull for AB12أوAB12 is already parked. تُحررleave(plate, hours)المكان وتُرجعAB12 paid 9(السعر مضروبًا في عدد الساعات، بحد أدنى ساعة واحدة)، أوno vehicle AB12. تُرجعstatus()القيمةfree: small 1, medium 0, large 2.
يقرأ الكود المزوَّد الأماكن بالتنسيق small,medium,large، ثم الأوامر park car AB12 (bike أو car أو van)، أو leave AB12 3، أو status، ويطبع كل رد.
ضع الكود في Size.kt وVehicle.kt وMotorbike.kt وCar.kt وVan.kt وGarage.kt. يحتوي Main.kt على كود الإدخال/الإخراج المزوَّد ولا يمكن تعديله.
جرّب بنفسك
fun main() {
// كود الإدخال/الإخراج المُزوَّد: أبقِه كما هو
val input = generateSequence(::readLine).toList()
val (small, medium, large) = input[0].split(",").map { it.toInt() }
val garage = Garage(small, medium, large)
for (cmd in input.drop(1)) {
val p = cmd.split(" ")
when (p[0]) {
"park" -> {
val vehicle = when (p[1]) {
"bike" -> Motorbike(p[2])
"van" -> Van(p[2])
else -> Car(p[2])
}
println(garage.park(vehicle))
}
"leave" -> println(garage.leave(p[1], p[2].toInt()))
else -> println(garage.status())
}
}
}
جميع دروس البرمجة كائنية التوجه
1الفئات والكائنات
العمل مع الملفاتتعريف الفئاتالمنشئات الأساسيةكتل init والتحقق من الصحةالمنشئات الثانويةمراجعة - بطاقة المكتبة4الوراثة
الأصناف المفتوحة والأصناف الفرعيةتجاوز الأعضاءsuper والمنشئاتالأصناف المجرّدةمراجعة - دليل الموظفينتدرّب بنفسك: Playground لـ Kotlin