اليوم سنتعلم كيفية استخدام وظائف طباعة كوتلن وكيفية الحصول على مدخلات المستخدم من وحدة التحكم وتحليلها. بالإضافة إلى ذلك، سننظر في Kotlin REPL.
وظائف طباعة كوتلن
لإخراج شيء ما على الشاشة، يتم استخدام الطريقتين التاليتين:
- print()
- println()
تقوم العبارة print
بطباعة كل شيء بداخله على الشاشة. تضيف العبارة println
سطرًا جديدًا في نهاية الإخراج. تقوم عبارات الطباعة داخليًا باستدعاء System.out.print
. يوضح الكود التالي عبارات الطباعة في العمل:
fun main(args: Array<String>) {
var x = 5
print(x++)
println("Hello World")
print("Do dinasours still exist?\n")
print(false)
print("\nx is $x.")
println(" x Got Updated!!")
print("Is x equal to 6?: ${x == 6}\n")
}
لطباعة متغير داخل عبارة الطباعة، نحتاج إلى استخدام رمز الدولار ($) تليه اسم المتغير/الثابت داخل سلسلة نصية مزدوجة. لطباعة نتيجة تعبير نستخدم ${ //التعبير هنا }
. يتم توضيح الإخراج عند تشغيل الكود أعلاه في محرر Kotlin عبر الإنترنت أدناه.
محارف وتعابير الهروب
للهروب من رمز الدولار وعلى سبيل المثال، نعامل ${expression} كسلسلة نصية فقط بدلاً من حسابها، يمكننا تحويلها إلى سلسلة نصية.
fun main(args: Array<String>) {
val y = "\${2 == 5}"
println("y = ${y}")
println("Do we use $ to get variables in Python or PHP? Example: ${'$'}x and ${'$'}y")
val z = 5
var str = "$z"
println("z is $str")
str = "\$z"
println("str is $str")
}
لاحظ أن وجود
$
بدون أي تعبير/متغير يُعتبر تهريبًا ضمن السلسلة فقط.
قيم الدالة الطباعية
fun sumOfTwo(a: Int, b: Int) : Int{
return a + b
}
fun main(args: Array<String>) {
val a = 2
val b = 3
println("Value of ${'$'}a and ${'$'}b is : ${sumOfTwo(a,b)}")
println(println("Printing Value of ${'$'}a and ${'$'}b is : ${sumOfTwo(a,b)}"))
}
يتم طباعة الناتج التالي: ملاحظة: تمرير print داخل آخر يتصرف كالانعكاس. يتم طباعة الأقرب إلى الداخل أولاً. تعود العبارة print بـ
Unit
(ما يعادل void في Java).
إدخال المستخدم في Kotlin
يمكن استخدام الطريقتين التاليتين للحصول على إدخال المستخدم:
- readLine()
- فئة Scanner
ملاحظة: يتطلب إدخال المستخدم أداة سطر الأوامر. يمكنك استخدام REPL أو IntelliJ. لنستخدم IntelliJ هنا.
استخدام readLine()
readLine()
تُرجع قيمة من النوع String؟ للتعامل مع القيم القابلة للفارغ عند قراءة نهاية الملف وما إلى ذلك. يظهر الكود التالي مثالًا باستخدام readLine()
fun main(args: Array<String>) {
println("Enter your name:")
var name = readLine()
print("Length is ${name?.length}")
}
كما يمكنك رؤية، نحتاج إلى فك تجميد النوع القابل للفارغ لاستخدام وظائف النوع String على الخاصية. استخدم !! لتحويل String؟ إلى String بقوة، فقط عندما تكون متأكدًا تمامًا من أن القيمة لن تكون فارغة. وإلا ستحدث تعطل. تحويل الإدخال إلى عدد صحيح لتحويل السلسلة النصية للإدخال إلى Int، نقوم بما يلي:
fun main(args: Array<String>) {
var number = readLine()
try {
println("Number multiply by 5 is ${number?.toInt()?.times(5)}")
} catch (ex: NumberFormatException) {
println("Number not valid")
}
}
مرة أخرى، نستخدم مشغل ?.
لتحويل النوع القابل للفارغ أولاً إلى Int باستخدام toInt()
. ثم نضربها في 5. قراءة الإدخال بشكل مستمر يمكننا استخدام حلقة do while لقراءة الإدخال بشكل مستمر كما هو موضح أدناه.
do {
line = readLine()
if (line == "quit") {
println("Closing Program")
break
}
println("Echo $line")
} while (true)
}
إخراج الكود أعلاه في سطر الأوامر IntelliJ يُعطى أدناه.
قراءة قيم متعددة باستخدام مشغل الانقسام
يمكننا قراءة قيم متعددة مفصولة بفواصل وحفظها في شكل توبل كما هو موضح أدناه.
fun readIntegers(separator: Char = ',')
= readLine()!!.split(separator).map(String::toInt)
fun main(args: Array<String>) {
println("Enter your values:")
try {
val (a, b, c) = readLine()!!.split(' ')
println("Values are $a $b and $c")
} catch (ex: IndexOutOfBoundsException) {
println("Invalid. Missing values")
}
try {
val (x, y, z) = readIntegers()
println("x is $x y is $y z is $z")
} catch (ex: IndexOutOfBoundsException) {
println("Invalid. Missing values")
}
catch (ex: NumberFormatException) {
println("Number not valid")
}
}
تأخذ وظيفة الـ split
المحرف الذي سيكون المحدد. تستخدم وظيفة readIntegers()
تعيينًا على الانقسام لتحويل كل قيمة إلى Integer. إذا أدخلت قيمًا أقل من المحدد في الصف، فستحصل على IndexOutOfBoundsException. لقد استخدمنا try-catch في كل من المدخلات. يبدو الإخراج مثل هذا: بديلًا عن الأزواج، يمكننا استخدام قائمة أيضًا كما هو موضح أدناه.
val ints: List<String>? = readLine()?.split("|".toRegex())
println(ints)
فئة ماسحة Kotlin
يمكننا استخدام Scanner(System.`in`)
لأخذ المدخلات من لوحة المفاتيح للإدخال القياسي. يوضح الكود التالي نفس الشيء:
fun main(args: Array) {
val reader = Scanner(System.`in`)
print("Enter a number: ")
// nextInt() يقرأ العدد الصحيح التالي. next() يقرأ السلسلة
var integer:Int = reader.nextInt()
println("You entered: $integer")
reader.nextInt()
يقرأ العدد الصحيح التالي. reader.next()
يقرأ السلسلة التالية. reader.nextFloat() يقرأ العدد العائم التالي وهكذا. reader.nextLine()
يمرر الماسح الضوئي إلى nextLine ويقوم أيضًا بمسح النطاق. يوضح الكود التالي قراءة أنواع مختلفة من المدخلات داخل عبارة طباعة مباشرة.
import java.util.*
fun main(args: Array) {
val reader = Scanner(System.`in`)
print("Enter a number: ")
try {
var integer: Int = reader.nextInt()
println("You entered: $integer")
} catch (ex: InputMismatchException) {
println("Enter valid number")
}
enterValues(reader)
//انقل الماسح الضوئي إلى السطر التالي وإلا فإن المدخلات المخزنة ستُقرأ للمرة القادمة هنا فقط.
reader.nextLine()
enterValues(reader)
}
fun enterValues(reader: Scanner) {
println("Enter a float/boolean :")
try {
print("Values: ${reader.nextFloat()}, ${reader.nextBoolean()}")
} catch (ex: InputMismatchException) {
println("First value should be a float, second should be a boolean. (Separated by enter key)")
}
}
تُلقى استثناء InputMismatchException عندما تكون المدخلات من نوع مختلف عن المطلوب. يتم تقديم الإخراج أدناه.
محاكي Kotlin REPL
المحاكي المعروف أيضًا باسم Read-Eval-Print-Loop يُستخدم لتشغيل جزء من الشفرة في قذف تفاعلي مباشرة. يمكننا فعل ذلك في محطة الطرفية / سطر الأوامر الخاصة بنا عن طريق بدء تشغيل مترجم Kotlin.
تثبيت مترجم سطر الأوامر
يمكننا تثبيت مترجم سطر الأوامر على Mac / Windows / Ubuntu كما هو موضح هنا. عادةً ، يمكننا في نظام Mac استخدام HomeBrew على محطتنا لتثبيت مترجم Kotlin.
brew update
brew install kotlin
بمجرد الانتهاء من التثبيت ، قم ببدء المحاكي بإدخال kotlinc
في محطتك الطرفية / cmd. فيما يلي شفرتي الأولى في المحاكي. هذا كل شيء بالنسبة لوظائف طباعة Kotlin ومقدمة سريعة لمحاكي Kotlin REPL.
Source:
https://www.digitalocean.com/community/tutorials/kotlin-print-println-readline-scanner-repl