היום נלמד איך להשתמש בפונקציות הדפסה של Kotlin וכיצד לקבל ולנתח קלט מהמקלדת. בנוסף, נתעקוב אחר Kotlin REPL.
פונקציות הדפסה של Kotlin
כדי להדפיס משהו על המסך, משתמשים בשני השיטות הבאות:
- 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")
}
כדי להדפיס משתנה בתוך ההצהרה להדפסה, עלינו להשתמש בסימול הדולר($) לאחריו שם המשתנה (var/val) בתוך מחרוזת צטוטת כפולה. כדי להדפיס את תוצאת הביטוי, אנו משתמשים ב-${ //הביטוי הולך כאן }
. הפלט כאשר הקוד מופעל במהדורת Kotlin Online מוצג למטה.
יציאה מתווים וביטויים
כדי להתרחק מסימול הדולר ולדוג יחסוך ל-${ביטוי} להיחשב כמחרוזת בלבד במקום לחשב אותו, אנו יכולים להתרחק ממנו.
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 בג'אווה).
קלט משתמש בקוטלין
לקבלת קלט מהמשתמש, ניתן להשתמש בשתי השיטות הבאות:
- 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}")
}
כפי שאתה רואה, עלינו לבטל את סוג הנתונים הניתנים להסרה כדי להשתמש בפונקציות של סוג המחרוזת על המאפיין. השתמש ב !! כדי להמיר בכוח את המחרוזת? למחרוזת, רק כאשר אתה בטוח באופן מוחלט שהערך לא יהיה ערך ריק. אחרת התוכנית תקרוס. המרת הקלט למספר שלם כדי להמיר את מחרוזת הקלט ל- 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 Command Line מוצג למטה.
קריאת ערכים מרובים באמצעות אופרטור split
אנו יכולים לקרוא ערכים מרובים המופרדים באמצעות סימני נפרד ולשמור אותם בצורת tuple כפי שמוצג למטה.
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()
משתמשת ב-map על split כדי להמיר כל ערך ל-Int. אם תזין ערכים שקטנים מהמצויין בטאפל, תקבל IndexOutOfBoundsException. עשינו שימוש בתפקיד בניסיון-תפסוקה בשני הקלטים. הפלט נראה כמו כך: באופן אלטרנטיבי, במקום טאפלים, אנו יכולים להשתמש גם ברשימה כפי שמוצג למטה.
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 משולפת כאשר הקלט הוא של סוג שונה מהנדרש. הפלט מוצג למטה.
קוטלין REPL
REPL הידוע גם כקריאה-הערכה-הדפסה-לולאה משמש להרצת חלק מהקוד בסביבת מעטפת אינטראקטיבית ישירות. ניתן לעשות זאת בטרמינל/שורת פקודה שלנו על ידי הפעלת מהדק של קוטלין.
התקנת מהדק של שורת הפקודה
ניתן להתקין את מהדק שורת הפקודה במערכות Mac/Windows/Ubuntu כפי שמודגש כאן. כללית, ב-Mac, נוכל להשתמש ב-HomeBrew בטרמינל שלנו כדי להתקין את מהדק הקוד של קוטלין.
brew update
brew install kotlin
כאשר זה נעשה, התחל את ה-REPL על ידי כניסה לטרמינל/פקודה שלך והקלדת kotlinc
. להלן הקוד הראשון שלי ב-REPL. זהו הכול בנושא פונקציות ההדפסה של Kotlin והקדמה מהירה ל-Kotlin REPL.
Source:
https://www.digitalocean.com/community/tutorials/kotlin-print-println-readline-scanner-repl