קבל מספר אקראי בקוטלין

1. הקדמה

הדרכה קצרה זו תדגים כיצד ליצור מספר אקראי באמצעות Kotlin.

2. מספר אקראי באמצעות java.lang.Math

הדרך הקלה ביותר ליצור מספר אקראי בקוטלין היא להשתמש java.lang.Math. הדוגמה הבאה תיצור מספר כפול אקראי בין 0 ל -1.

@Test fun whenRandomNumberWithJavaUtilMath_thenResultIsBetween0And1 () {val randomNumber = Math.random () assertTrue {randomNumber> = 0} assertTrue {randomNumber <1}}

3. מספר אקראי באמצעות ThreadLocalRandom

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

ThreadLocalRandom הוא בטיחות חוט ומספק ביצועים טובים יותר בסביבה מרובת הברגה כי זה מספק נפרד אַקרַאִי אובייקט לכל חוט ובכך מפחית את המחלוקת בין השרשור:

@Test fun whenRandomNumberWithJavaThreadLocalRandom_thenResultsInDefaultRanges () {val randomDouble = ThreadLocalRandom.current (). NextDouble () val randomInteger = ThreadLocalRandom.current (). NextInt () val randomLong = ThreadLocalRandom. assertTrue {randomDouble = Integer.MIN_VALUE} assertTrue {randomInteger = Long.MIN_VALUE} assertTrue {randomLong <Long.MAX_VALUE}}

4. מספר אקראי באמצעות Kotlin.js

אנחנו יכולים גם ליצור כפול אקראי משתמש ב מתמטיקה מחלקה מספריית kotlin.js.

@Test fun whenRandomNumberWithKotlinJSMath_thenResultIsBetween0And1 () {val randomDouble = Math.random () assertTrue {randomDouble> = 0} assertTrue {randomDouble <1}}

5. מספר אקראי בתחום נתון באמצעות קוטלין טהור

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

@Test fun whenRandomNumberWithKotlinNumberRange_thenResultInGivenRange () {val randomInteger = (1..12). Shuffled (). First () assertTrue {randomInteger> = 1} assertTrue {randomInteger <= 12}}

6. מספר אקראי בטווח נתון באמצעות ThreadLocalRandom

ThreadLocalRandom המוצג בסעיף 3 יכול לשמש גם ליצירת מספר אקראי בטווח נתון:

@Test fun whenRandomNumberWithJavaThreadLocalRandom_thenResultsInGivenRanges () {val randomDouble = ThreadLocalRandom.current (). NextDouble (1.0, 10.0) val randomInteger = ThreadLocalRandom.current (). NextInt (1, 10) val randomLong = Thom. 10) assertTrue {randomDouble> = 1} assertTrue {randomDouble = 1} assertTrue {randomInteger = 1} assertTrue {randomLong <10}}

7. פסאודו מול מחוללי מספרים אקראיים מאובטחים

יישומי JDK סטנדרטיים של java.util.Random השתמש במחולל ליניארי ליניארי כדי לספק מספרים אקראיים. הבעיה באלגוריתם זה היא שהוא אינו חזק מבחינה קריפטוגרפית, ותוקפים יכולים לחזות את תפוקתו.

כדי להתגבר על נושא זה, עלינו להשתמש java.security.SecureRandom במקומות בהם אנו זקוקים לביטחון טוב:

כיף כש- RandomNumberWithJavaSecureRandom_thenResultsInGivenRanges () {val secureRandom = SecureRandom () secureRandom.nextInt (100) assertTrue {randomLong> = 0} assertTrue {randomLong <100}}

SecureRandom מייצר ערכים אקראיים חזקים מבחינה קריפטוגרפית באמצעות מחולל מספרים פסאודו-אקראי חזק קריפטוגרפי (CSPRNG).

יישומים לא צריכים להשתמש בדרכים אחרות ליצירת מספר אקראי מאובטח במקומות הקשורים לאבטחה.

8. מסקנה

במאמר זה למדנו כמה דרכים ליצור מספר אקראי בקוטלין.

כמו תמיד, כל הקוד המוצג במדריך זה ניתן למצוא באתר GitHub.


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