כיצד להשתמש בביטויי טווח קוטלין

1. הקדמה

טווח הוא רצף ערכים המוגדר על ידי התחלה, סוף וצעד.

במדריך מהיר זה נבחן כיצד אנו יכולים להגדיר ולהשתמש בטווחים בקוטלין.

2. שימוש בטווחי קוטלין

בקוטלין נוכל ליצור טווחים באמצעות ה- rangeTo () ו עד ל() פונקציות או המפעיל ..

אנו יכולים להשתמש בטווחים לכל סוג דומה.

כברירת מחדל, הם כוללים, כלומר הביטוי 1..4 תואם לערכים 1,2,3 ו -4.

בנוסף, יש ברירת מחדל נוספת: המרחק בין שני ערכים, הנקראים צעד, עם ערך מרומז של 1.

אז עכשיו, בואו נסתכל על כמה דוגמאות ליצירת טווחים ושימוש בשיטות שימושיות אחרות כדי לתפעל אותם.

2.1. יצירת טווחים

טווחים מיישמים ממשק משותף - סגור התוצאה של א סגור היא התקדמות (כמו אינטגרציה, ארוך פרוגרסיה, אוֹ CharProgression).

התקדמות זו מכילה התחלה, סוף כולל וצעד וזה תת-סוג של ניתן לנידון איפה N נמצא Int, Long אוֹ לְהַשְׁחִיר.

נתחיל בכך שנראה את הדרך הפשוטה ביותר ליצור טווח, באמצעות ".." ו- ב מפעילים:

(אני ב 1..9)

כמו כן, אם אנו רוצים להגדיר טווח אחורה נוכל להשתמש ב- עד ל מַפעִיל:

(אני ב 9 למטה עד 1) 

אנו יכולים גם להשתמש בביטוי זה כחלק מ- אם הצהרה כדי לבדוק אם ערך שייך לטווח:

אם (3 ב -1..9) הדפס ("כן")

2.2. טווחי הברחה

כעת, אמנם אנו יכולים להשתמש בטווחים עם כל דבר מקביל, אך אם אנו רוצים לחזור עליו, אנו זקוקים לטווח סוגים אינטגרלי.

עכשיו בואו נסתכל על הקוד שיחזור דרך טווח:

עבור (i ב 1.rangeTo (9)) {הדפס (i) // הדפס 123456789} עבור (i ב 9. downTo (1)) {הדפס (i) // הדפס 987654321}

אותו מקרה שימוש חל על תווים:

עבור (ch ב- 'a' .. 'f') {הדפס (ch) // הדפס abcdef} עבור (ch ב- 'f' למטה To 'a') {הדפס (ch) // הדפס fedcba}

3. שימוש ב- sטפ () פוּנקצִיָה

השימוש ב- שלב() פונקציה אינטואיטיבית למדי: אנו יכולים להשתמש בו כדי להגדיר מרחק בין ערכי הטווח:

עבור (אני ב 1..9 שלב 2) {הדפס (i) // הדפס 13579} עבור (אני ב 9 למטה לשלב 1 2) {הדפס (i) // הדפס 97531}

בדוגמה זו, אנו חוזרים ואורחים דרך הערכים 1-9, עם ערך צעד 2.

4. באמצעות הפוך() פוּנקצִיָה

כפי שהשם מרמז, הפוך() הפונקציה תהפוך את סדר הטווח:

(1..9) .reversed (). ForEach {print (it) // Print 987654321} (1..9) .reversed (). שלב (3) .forach {print (it) // Print 963}

5. שימוש ב- עד() פוּנקצִיָה

כאשר אנו רוצים ליצור טווח שאינו כולל את אלמנט הקצה בו אנו יכולים להשתמש עד():

עבור (אני ב -1 עד 9) {הדפס (i) // הדפס 12345678}

6. ה אחרון,ראשון,שלב אלמנטים

אם עלינו למצוא את הראשון, את הצעד או את הערך האחרון של הטווח, יש פונקציות שיחזירו לנו אותן:

הדפס ((1..9). ראשון) // הדפס 1 הדפס ((1..9 שלב 2). צעד) // הדפס 2 הדפס ((3..9). הפוך (). אחרון) // הדפס 3

7. טווחי סינון

ה לְסַנֵן() הפונקציה תחזיר רשימה של אלמנטים התואמים לפרדיקט נתון:

val r = 1..10 val f = r.filter {it -> it% 2 == 0} // הדפס [2, 4, 6, 8, 10]

אנו יכולים גם להחיל פונקציות אחרות כגון מַפָּה() ו לְהַפחִית() למגוון שלנו:

val m = r.map {it -> it * it} // הדפס [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] val rdc = r. להפחית {a, b -> a + b} // הדפס 55 

8. פונקציות שירות אחרות

ישנן פונקציות רבות אחרות שנוכל להחיל על הטווח שלנו, כמו דקות, מקסימום, סכום, ממוצע, ספירה, מובחן:

val r = 1..20 הדפסה (r.min ()) // הדפסה 1 הדפסה (r.max ()) // הדפסת 20 הדפסה (r.sum ()) // הדפסת 210 הדפסה (r. ממוצע () ) // הדפס 10.5 הדפס (r.count ()) // הדפס 20 val חוזר = listOf (1, 1, 2, 4, 4, 6, 10) הדפס (repeat.distinct ()) // הדפס [1, 2, 4, 6, 10] 

9. אובייקטים בהתאמה אישית

אפשר גם ליצור טווח על אובייקטים מותאמים אישית. לשם כך, הדרישה היחידה היא להאריך את ניתן להשוות מִמְשָׁק.

אנומה היא דוגמה טובה. כל האניומים בקוטלין מתרחבים ניתן להשוות כלומר, כברירת מחדל, האלמנטים ממוינים ברצף שהם מופיעים.

בוא ניצור מהיר צֶבַע enum:

class enum צבע (val rgb: Int): השוואה {BLUE (0x0000FF), GREEN (0x008000), RED (0xFF0000), MAGENTA (0xFF00FF), YELLOW (0xFFFF00); } 

ואז השתמש בו בחלק אם הצהרות:

טווח val = אדום..צהוב אם (range.contains (Color.MAGENTA)) println ("true") // הדפס true if (Color.RED in Color.GREEN..Color.YELLOW) println ("true") / / הדפס נכון אם (Color.RED! בצבע.MAGENTA..Color.YELLOW) println ("true") // הדפס true

עם זאת, מכיוון שזה אינו סוג אינטגראלי, איננו יכולים לחזור עליו. אם ננסה, נקבל שגיאת אוסף:

fun main (טענות: Array) {for (c ב- Color.BLUE.rangeTo (Color.YELLOW)) println (c) // for-loop range חייב להיות בשיטת iterator ()}

ואם אנו רוצים שיהיה לנו טווח מותאם אישית שנוכל לחזור עליו, אנחנו רק צריכים ליישם אותו סגור בנוסף ל איטרטור.

10. מסקנה

במאמר זה הדגמנו כיצד אנו יכולים להשתמש בביטויי טווח בקוטלין ובפונקציות שונות שנוכל ליישם.

כמו תמיד קוד המקור זמין ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found