Programlamada rastgele sayı üretmek yaygın bir görevdir ve C# bunu gerçekleştirmek için sağlam araçlar sunar. Bu makale, System.Random
sınıfını, işlevlerini ve rastgele tam sayılar üretmek için en iyi uygulamaları ele almaktadır.
İçindekiler
Random
Sınıfını Anlamak- Rastgele Tam Sayılar Üretmek
- Rastgele Sayı Üreticisini Başlatmak (Seed)
- Kriptografik Olarak Güvenli Rastgele Sayılar
- Sonuç
- SSS
Random
Sınıfını Anlamak
C# içindeki System.Random
sınıfı, yarı-rastgele sayılar üretmek için kullanılır. Bu sayıların gerçekten rastgele olmadığını hatırlamak çok önemlidir; deterministik bir algoritma kullanılarak üretilirler. Bu, aynı başlangıç durumuyla (seed) verildiğinde, sayı dizisinin aynı olacağı anlamına gelir. Bununla birlikte, birçok uygulama için System.Random
tarafından sağlanan yarı-rastgelelik yeterlidir.
Rastgele Tam Sayılar Üretmek
Rastgele tam sayılar üretmek için birincil yöntem Next()
‘tir. Bu yöntem birkaç aşırı yükleme sunar:
Next()
:int.MaxValue
‘den küçük negatif olmayan bir rastgele tam sayı döndürür.Next(maxValue)
: BelirtilenmaxValue
‘den (maxValue
pozitif olmalıdır) küçük negatif olmayan bir rastgele tam sayı döndürür.Next(minValue, maxValue)
: [minValue
,maxValue
) kapsayıcı aralığında bir rastgele tam sayı döndürür (maxValue
,minValue
‘dan büyük olmalıdır).
using System;
public class RandomIntExample
{
public static void Main(string[] args)
{
Random random = new Random();
int randomNumber1 = random.Next(); // 0 ile int.MaxValue - 1 arasında
Console.WriteLine($"Rastgele sayı 1: {randomNumber1}");
int randomNumber2 = random.Next(10); // 0 ile 9 arasında
Console.WriteLine($"Rastgele sayı 2: {randomNumber2}");
int randomNumber3 = random.Next(10, 21); // 10 ile 20 arasında
Console.WriteLine($"Rastgele sayı 3: {randomNumber3}");
}
}
Rastgele Sayı Üreticisini Başlatmak (Seed)
Seed değeri, Random
sınıfının iç durumunu başlatır. Aynı seed’i kullanmak her zaman aynı sayı dizisini üretecektir. Seed sağlanmazsa, sistem saati kullanılır ve bu da uygulamanın her çalıştırıldığında farklı bir diziye neden olur. Bu, çoğu uygulama için genellikle tercih edilir.
using System;
public class SeededRandomExample
{
public static void Main(string[] args)
{
Random random1 = new Random(12345);
int number1 = random1.Next(1, 101);
Console.WriteLine($"12345 seed'iyle rastgele sayı: {number1}");
Random random2 = new Random(12345);
int number2 = random2.Next(1, 101); // number1 ile aynı
Console.WriteLine($"12345 seed'iyle rastgele sayı: {number2}");
Random random3 = new Random(); // Sistem zamanını kullanır
int number3 = random3.Next(1, 101); // Farklı sayı
Console.WriteLine($"Sistem zamanı seed'iyle rastgele sayı: {number3}");
}
}
Seed ayarlamak, test ve tekrarlanabilir sonuçlar gerektiren senaryolar için yararlıdır.
Kriptografik Olarak Güvenli Rastgele Sayılar
Kriptografik olarak güvenli rastgele sayılar gerektiren uygulamalar için (örneğin, güvenlik açısından hassas uygulamalar), System.Random
yeterli değildir. Bunun yerine, System.Security.Cryptography
ad alanını, özellikle RNGCryptoServiceProvider
sınıfını kullanın.
Sonuç
System.Random
sınıfı, C# içinde yarı-rastgele tam sayılar üretmek için basit ve verimli bir yol sunar. Seed’in rolünü ve farklı Next()
aşırı yüklemelerini anlamak, esnek ve kontrollü rastgele sayı üretimine olanak tanır. Güvenlik açısından hassas uygulamalar için her zaman kriptografik olarak güvenli rastgele sayı üreteçlerini seçin.
SSS
- S: Sayılar gerçekten rastgele mi? C: Hayır, yarı-rastgeledirler.
- S: Belirli bir aralıkta rastgele sayılar nasıl üretilir? C:
Next(minValue, maxValue)
kullanın. - S: Seed neden ayarlanır? C: Tekrarlanabilir sonuçlar için.
- S: Kriptografik olarak güvenli rastgele sayılar ne durumda? C:
RNGCryptoServiceProvider
kullanın. - S: Diğer veri tipleri? C:
Random
sınıfı diğer tipler (ondalıklı sayılar vb.) üretmek için yöntemler sağlar veya tam sayı sonuçları üzerinde dönüşümler yapabilirsiniz.