Bu rotadaki codelab'lerde, bir zar atma Android uygulaması oluşturacaksınız. Kullanıcı "zarı attığında" rastgele bir sonuç oluşturulacak. Sonuç, zarın yüz sayısını dikkate alır. Örneğin, 6 yüzlü bir zarda yalnızca 1-6 arasındaki değerler atılabilir.
Nihai uygulama bu şekilde görünecek.
Bu uygulamanın yeni programlama kavramlarına odaklanmanıza yardımcı olmak için temel uygulama işlevlerini oluşturmak üzere tarayıcı tabanlı Kotlin programlama aracını kullanacaksınız. Program, sonuçlarınızı konsola verir. Daha sonra kullanıcı arayüzünü Android Studio'da uygulayacaksınız.
Bu ilk codelab'de, zar atma işlemini simüle eden ve zar gibi rastgele bir sayı çıkaran bir Kotlin programı oluşturacaksınız.
Ön koşullar
- https://try.kotlinlang.org/ adresinde kodu açma, düzenleme ve çalıştırma
- Değişkenler ve işlevler kullanan, konsola sonuç yazdıran bir Kotlin programı oluşturup çalıştırın.
${variable}
gösterimini içeren bir dize şablonu kullanarak metin içindeki sayıları biçimlendirin.
Neler öğreneceksiniz?
- Zar atma simülasyonu için programatik olarak rastgele sayılar oluşturma
- Değişken ve yöntem içeren bir
Dice
sınıfı oluşturarak kodunuzu nasıl yapılandıracağınızı öğrenin. - Bir sınıfın nesne örneğini oluşturma, değişkenlerini değiştirme ve yöntemlerini çağırma
Ne oluşturacaksınız?
- Tarayıcı tabanlı Kotlin programlama aracında, rastgele zar atma işlemi yapabilen bir Kotlin programı.
İhtiyacınız olanlar
- İnternet bağlantısı olan bir bilgisayar
Oyunlarda genellikle rastgele bir öğe bulunur. Rastgele bir ödül kazanabilir veya oyun tahtasında rastgele sayıda adım ilerleyebilirsiniz. Günlük hayatınızda daha güvenli şifreler oluşturmak için rastgele sayılar ve harfler kullanabilirsiniz.
Gerçek zar atmak yerine, sizin için zar atma işlemini simüle eden bir program yazabilirsiniz. Zar her atıldığında sonuç, olası değerler aralığındaki herhangi bir sayı olabilir. Neyse ki bu tür bir program için kendi rastgele sayı oluşturucunuzu oluşturmanız gerekmez. Kotlin de dahil olmak üzere çoğu programlama dilinde rastgele sayılar oluşturmak için yerleşik bir yöntem bulunur. Bu görevde, rastgele bir sayı oluşturmak için Kotlin kodunu kullanacaksınız.
Başlangıç kodunuzu ayarlama
- Tarayıcınızda https://try.kotlinlang.org/ web sitesini açın.
- Kod düzenleyicideki mevcut tüm kodu silip aşağıdaki kodla değiştirin. Bu, önceki codelab'lerde kullandığınız
main()
işlevidir (İlk Kotlin programınızı yazma codelab'ine bakın).
fun main() {
}
Rastgele işlevini kullanma
Bir zar atmak için geçerli tüm zar atma değerlerini temsil etmenin bir yolunu bulmanız gerekir. Normal 6 yüzlü bir zar için kabul edilebilir zar atışları şunlardır: 1, 2, 3, 4, 5 ve 6.
Daha önce, tam sayılar için Int
ve metin için String
gibi veri türleri olduğunu öğrenmiştiniz. IntRange
başka bir veri türüdür ve bir başlangıç noktasından bir bitiş noktasına kadar olan tam sayı aralığını temsil eder. IntRange
, zar atıldığında elde edilebilecek olası değerleri temsil etmek için uygun bir veri türüdür.
main()
işlevinizin içinde,diceRange
adlı birval
olarak değişken tanımlayın. 6 yüzlü bir zarın atıldığında gelebileceği tam sayı aralığını temsil eden 1 ile 6 arasındaki birIntRange
değerini atayın.
val diceRange = 1..6
1..6
, başlangıç sayısı, iki nokta ve bitiş sayısı (arada boşluk yok) içerdiğinden Kotlin aralığı olduğunu anlayabilirsiniz. Tam sayı aralıklarına diğer örnekler: 2-5 arasındaki sayılar için 2..5
, 100-200 arasındaki sayılar için 100..200
.
println()
işlevini çağırmak sisteme verilen metni yazdırmasını söylemeye benzer. Belirli bir aralıkta sizin için rastgele bir sayı oluşturup döndürmek üzere random()
adlı bir işlevi kullanabilirsiniz. Sonucu daha önce olduğu gibi bir değişkende saklayabilirsiniz.
main()
içinde,randomNumber
adlı bir değişkenival
olarak tanımlayın.- Aşağıda gösterildiği gibi,
randomNumber
değişkeninindiceRange
aralığındarandom()
işlevi çağrıldığında elde edilen sonuç değerine sahip olmasını sağlayın.
val randomNumber = diceRange.random()
Değişken ile işlev çağrısı arasında nokta kullanarak random()
işlevini diceRange
üzerinde çağırdığınızı unutmayın. Bu ifadeyi "diceRange
değerinden rastgele bir sayı oluşturma" olarak okuyabilirsiniz. Sonuç daha sonra randomNumber
değişkeninde saklanır.
- Rastgele oluşturulan numaranızı görmek için aşağıdaki örnekte gösterildiği gibi, dize biçimlendirme notasyonunu (aynı zamanda "dize şablonu" olarak da adlandırılır)
${randomNumber}
kullanarak yazdırın.
println("Random number: ${randomNumber}")
Tamamlanmış kodunuz aşağıdaki gibi görünmelidir.
fun main() {
val diceRange = 1..6
val randomNumber = diceRange.random()
println("Random number: ${randomNumber}")
}
- Kodunuzu birkaç kez çalıştırın. Her seferinde, farklı rastgele sayılarla aşağıdaki gibi bir çıkış görmeniz gerekir.
Random number: 4
Zar attığınızda, zarlar elinizdeki gerçek nesnelerdir. Yazdığınız kod mükemmel bir şekilde çalışsa da bunun gerçek zarla ilgili olduğunu düşünmek zor. Bir programı temsil ettiği şeylere daha çok benzeyecek şekilde düzenlemek, programın anlaşılmasını kolaylaştırır. Bu nedenle, programatik zar atabilmek çok güzel olurdu.
Tüm zarlar temelde aynı şekilde çalışır. Aynı özelliklere (ör. kenarlar) ve aynı davranışlara (ör. yuvarlanabilme) sahiptirler. Kotlin'de, zarların yüzleri olduğunu ve rastgele bir sayı atabileceğini belirten bir zar planı oluşturabilirsiniz. Bu plana sınıf denir.
Bu sınıftan nesne örnekleri adı verilen gerçek zar nesneleri oluşturabilirsiniz. Örneğin, 12 yüzlü veya 4 yüzlü bir zar oluşturabilirsiniz.
Dice sınıfı tanımlama
Aşağıdaki adımlarda, yuvarlanabilir bir zarı temsil etmek için Dice
adlı yeni bir sınıf tanımlayacaksınız.
- Yeniden başlamak için
main()
işlevindeki kodu temizleyerek aşağıdaki gibi bir kod elde edin.
fun main() {
}
- Bu
main()
işlevinin altına boş bir satır ekleyin ve ardındanDice
sınıfını oluşturmak için kod ekleyin. Aşağıda gösterildiği gibi,class
anahtar kelimesiyle başlayın, ardından sınıfın adını ve açma ve kapama küme parantezini ekleyin. Sınıf kodunuzu yerleştirmek için küme parantezleri arasında boşluk bırakın.
class Dice {
}
Sınıf tanımı içinde, değişkenleri kullanarak sınıf için bir veya daha fazla özellik belirtebilirsiniz. Gerçek zarların yüz sayısı, rengi veya ağırlığı olabilir. Bu görevde, zarın yüz sayısı özelliğine odaklanacaksınız.
Dice
sınıfının içine, zarınızın kaç yüzlü olacağını belirtensides
adlı birvar
ekleyin.sides
değerini 6 olarak ayarlayın.
class Dice {
var sides = 6
}
Bu kadar basit. Artık zarları temsil eden çok basit bir sınıfınız var.
Dice sınıfının bir örneğini oluşturun
Bu Dice
sınıfıyla, zarın ne olduğuna dair bir planınız olur. Programınızda gerçek bir zar olması için Dice
nesne örneği oluşturmanız gerekir. (Üç zara ihtiyacınız olsaydı üç nesne örneği oluştururdunuz.)
Dice
sınıfının bir nesne örneğini oluşturmak içinmain()
işlevindemyFirstDice
adlı birval
oluşturun ve bunuDice
sınıfının bir örneği olarak başlatın. Sınıf adından sonraki parantezlere dikkat edin. Bu parantezler, sınıftan yeni bir nesne örneği oluşturduğunuzu gösterir.
fun main() {
val myFirstDice = Dice()
}
Artık myFirstDice
nesneniz olduğuna göre (plan kullanılarak oluşturulan bir şey) özelliklerine erişebilirsiniz. Dice
'nın tek özelliği sides
'dir. Bir özelliğe "nokta gösterimi" kullanarak erişirsiniz. Bu nedenle, myFirstDice
öğesinin sides
özelliğine erişmek için "myFirstDice
nokta sides
" olarak telaffuz edilen myFirstDice.sides
'ı çağırırsınız.
myFirstDice
beyanının altına,myFirstDice.
öğesininsides
sayısını çıkaran birprintln()
ifadesi ekleyin.
println(myFirstDice.sides)
Kodunuz aşağıdaki gibi görünmelidir.
fun main() {
val myFirstDice = Dice()
println(myFirstDice.sides)
}
class Dice {
var sides = 6
}
- Programınızı çalıştırdığınızda
Dice
sınıfında tanımlanansides
sayısı çıkışı alınır.
6
Artık Dice
sınıfınız ve 6 sides
içeren gerçek bir zar myFirstDice
var.
Haydi zarları atalım!
Zarı Atın
Daha önce pasta katlarını yazdırma işlemini gerçekleştirmek için bir işlev kullandınız. Zar atma da işlev olarak uygulanabilen bir eylemdir. Tüm zarlar atılabildiğinden Dice
sınıfına bununla ilgili bir işlev ekleyebilirsiniz. Bir sınıfın içinde tanımlanan işlevlere yöntem de denir.
Dice
sınıfında,sides
değişkeninin altına boş bir satır ekleyin ve ardından zar atmak için yeni bir işlev oluşturun.fun
Kotlin anahtar kelimesiyle başlayın, ardından yöntemin adını, parantezleri()
ve açma ve kapatma küme parantezlerini{}
ekleyin. Aşağıda gösterildiği gibi, daha fazla kod için yer açmak üzere küme parantezleri arasında boş bir satır bırakabilirsiniz. Sınıfınız aşağıdaki gibi görünmelidir.
class Dice {
var sides = 6
fun roll() {
}
}
Altı yüzlü bir zar attığınızda 1 ile 6 arasında rastgele bir sayı elde edersiniz.
roll()
yönteminin içinde birval randomNumber
oluşturun. Bu öğeye1..6
aralığında rastgele bir sayı atayın. Aralıktarandom()
işlevini çağırmak için nokta gösterimini kullanın.
val randomNumber = (1..6).random()
- Rastgele sayıyı oluşturduktan sonra konsola yazdırın. Tamamlanmış
roll()
yönteminiz aşağıdaki koda benzemelidir.
fun roll() {
val randomNumber = (1..6).random()
println(randomNumber)
}
myFirstDice
öğesinimain()
içinde gerçekten kullanıma sunmak içinmyFirstDice
üzerinderoll()
yöntemini çağırın. "Nokta gösterimi"ni kullanarak bir yöntemi çağırırsınız. Bu nedenle,myFirstDice
öğesininroll()
yöntemini çağırmak içinmyFirstDice.roll()
yazarsınız. Bu, "myFirstDice
noktaroll()
" olarak telaffuz edilir.
myFirstDice.roll()
Tamamlanmış kodunuz aşağıdaki gibi görünmelidir.
fun main() {
val myFirstDice = Dice()
println(myFirstDice.sides)
myFirstDice.roll()
}
class Dice {
var sides = 6
fun roll() {
val randomNumber = (1..6).random()
println(randomNumber)
}
}
- Kodunuzu çalıştırın. Kenar sayısının altında rastgele bir zar atma sonucu görürsünüz. Kodunuzu birkaç kez çalıştırın. Kenar sayısının aynı kaldığını ve zar atma değerinin değiştiğini fark edeceksiniz.
6 4
Tebrikler! Dice
değişkeni ve roll()
işlevi içeren bir Dice
sınıfı tanımladınız.sides
main()
işlevinde yeni bir Dice
nesne örneği oluşturup rastgele bir sayı üretmek için roll()
yöntemini çağırdınız.
Şu anda roll()
işlevinizde randomNumber
değerini yazdırıyorsunuz ve bu harika çalışıyor. Ancak bazen bir işlevin sonucunu, işlevi çağıran yere döndürmek daha faydalı olabilir. Örneğin, roll()
yönteminin sonucunu bir değişkene atayabilir ve ardından oyuncuyu bu miktarda hareket ettirebilirsiniz. Bunun nasıl yapıldığını görelim.
main()
bölümündemyFirstDice.roll()
yazan satırı değiştirin.val
adlı birdiceRoll
oluşturun. Bu değeri,roll()
yöntemi tarafından döndürülen değere eşit olarak ayarlayın.
val diceRoll = myFirstDice.roll()
roll()
henüz bir şey döndürmediği için bu işlem henüz bir şey yapmaz. Bu kodun amaçlandığı gibi çalışması için roll()
bir değer döndürmelidir.
Önceki codelab'lerde, işlevlere giriş bağımsız değişkenleri için bir veri türü belirtmeniz gerektiğini öğrenmiştiniz. Aynı şekilde, bir işlevin döndürdüğü veriler için de bir veri türü belirtmeniz gerekir.
- Hangi tür verilerin döndürüleceğini belirtmek için
roll()
işlevini değiştirin. Bu durumda, rastgele sayıInt
olduğundan dönüş türüInt
olur. Dönüş türünü belirtme söz dizimi şöyledir: İşlev adından sonra, parantezlerden sonra iki nokta üst üste, boşluk ve ardından işlevin dönüş türü içinInt
anahtar kelimesini ekleyin. İşlev tanımı aşağıdaki koda benzemelidir.
fun roll(): Int {
- Bu kodu çalıştırın. Sorunlar görünümünde bir hata görürsünüz. Şöyle diyor:
A ‘return' expression is required in a function with a block body.
İşlev tanımını Int
döndürecek şekilde değiştirdiniz ancak sistem,
kod aslında Int
döndürmüyor. "Blok gövdesi" veya "işlev gövdesi", bir işlevin küme parantezleri arasındaki kodu ifade eder. İşlev gövdesinin sonunda return
ifadesini kullanarak bir işlevden değer döndürerek bu hatayı düzeltebilirsiniz.
roll()
içindeprintln()
ifadesini kaldırın verandomNumber
içinreturn
ifadesiyle değiştirin.roll()
işleviniz aşağıdaki koda benzemelidir.
fun roll(): Int {
val randomNumber = (1..6).random()
return randomNumber
}
main()
içinde zarın kenarları için yazdırma ifadesini kaldırın.sides
vediceRoll
değerini bilgilendirici bir cümleyle yazdırmak için bir ifade ekleyin. Tamamlanmışmain()
işleviniz aşağıdaki koda benzer olmalıdır.
fun main() {
val myFirstDice = Dice()
val diceRoll = myFirstDice.roll()
println("Your ${myFirstDice.sides} sided dice rolled ${diceRoll}!")
}
- Kodunuzu çalıştırın. Çıkışınız aşağıdaki gibi olmalıdır.
Your 6 sided dice rolled 4!
Şu ana kadar yazdığınız tüm kodlar burada yer alıyor.
fun main() {
val myFirstDice = Dice()
val diceRoll = myFirstDice.roll()
println("Your ${myFirstDice.sides} sided dice rolled ${diceRoll}!")
}
class Dice {
var sides = 6
fun roll(): Int {
val randomNumber = (1..6).random()
return randomNumber
}
}
Her zarın 6 yüzü yoktur. Zarlar her şekil ve boyutta olabilir: 4 yüzlü, 8 yüzlü, hatta 120 yüzlü!
Dice
sınıfınızda,roll()
yönteminizde, aralığın ve dolayısıyla atılan rastgele sayının her zaman kenar sayısına uygun olması için sabit kodlanmış1..6
değerinisides
olarak değiştirin.
val randomNumber = (1..sides).random()
main()
işlevinde, zar atma işlemi yazdırıldıktan sonraFirstDice
değişkenininsides
değerini 20 olarak değiştir.
myFirstDice.sides = 20
- Aşağıdaki mevcut yazdırma ifadesini, sayfa sayısını değiştirdiğiniz yerin sonrasına kopyalayıp yapıştırın.
diceRoll
yazdırma işlemini,myFirstDice
üzerinderoll()
yöntemi çağrıldığında elde edilen sonucu yazdırma işlemiyle değiştirin.
println("Your ${myFirstDice.sides} sided dice has rolled a ${myFirstDice.roll()}!")
Programınız aşağıdaki gibi görünmelidir.
fun main() {
val myFirstDice = Dice()
val diceRoll = myFirstDice.roll()
println("Your ${myFirstDice.sides} sided dice rolled ${diceRoll}!")
myFirstDice.sides = 20
println("Your ${myFirstDice.sides} sided dice rolled ${myFirstDice.roll()}!")
}
class Dice {
var sides = 6
fun roll(): Int {
val randomNumber = (1..sides).random()
return randomNumber
}
}
- Programınızı çalıştırdığınızda 6 yüzlü zar için bir mesaj ve 20 yüzlü zar için ikinci bir mesaj görmeniz gerekir.
Your 6 sided dice rolled 3! Your 20 sided dice rolled 15!
Sınıf kavramı, genellikle gerçek dünyadaki fiziksel bir şeyi temsil etmek için kullanılır. Bu durumda, Dice
sınıfı fiziksel bir zarı temsil eder. Gerçek dünyada zarların kenar sayısı değiştirilemez. Farklı sayıda yüzü olan bir zar istiyorsanız başka bir zar almanız gerekir. Programatik olarak bu, mevcut bir Dice
nesne örneğinin sides özelliğini değiştirmek yerine, ihtiyacınız olan sayıda yüzü olan yeni bir zar nesnesi örneği oluşturmanız gerektiği anlamına gelir.
Bu görevde, yeni bir örnek oluştururken kenar sayısını belirtebilmeniz için Dice
sınıfını değiştireceksiniz. Dice
sınıf tanımını, kenar sayısı için bir bağımsız değişken kabul edecek şekilde değiştirin. Bu, bir işlevin girdi için bağımsız değişkenleri kabul etmesine benzer.
Dice
sınıf tanımını,numSides
adlı bir tam sayı bağımsız değişkenini kabul edecek şekilde değiştirin. Sınıfınızdaki kod değişmez.
class Dice(val numSides: Int) {
// Code inside does not change.
}
Dice
sınıfında, artıknumSides
değişkenini kullanabileceğiniz içinsides
değişkenini silin.- Ayrıca,
numSides
kullanmak için aralığı düzeltin.
Dice
sınıfınız aşağıdaki gibi görünmelidir.
class Dice (val numSides: Int) {
fun roll(): Int {
val randomNumber = (1..numSides).random()
return randomNumber
}
}
Bu kodu çalıştırırsanız main()
sınıfındaki değişikliklerle çalışması için main()
sınıfını güncellemeniz gerektiğinden birçok hata görürsünüz.Dice
main()
içinde 6 kenarlımyFirstDice
oluşturmak için artık kenar sayısını aşağıdaki örnekte gösterildiği gibiDice
sınıfına bağımsız değişken olarak iletmeniz gerekir.
val myFirstDice = Dice(6)
- Yazdırma ifadesinde
sides
ifadesininumSides
olarak değiştirin. - Bunun altında,
sides
değerini 20 olarak değiştiren kodu silin. Çünkü bu değişken artık mevcut değildir. - Altındaki
println
ifadesini de silin.
main()
işleviniz aşağıdaki koda benzemelidir ve çalıştırdığınızda hata olmamalıdır.
fun main() {
val myFirstDice = Dice(6)
val diceRoll = myFirstDice.roll()
println("Your ${myFirstDice.numSides} sided dice rolled ${diceRoll}!")
}
- İlk zar atışını yazdırdıktan sonra 20 yüzlü
mySecondDice
adlı ikinci birDice
nesnesi oluşturup yazdırmak için kod ekleyin.
val mySecondDice = Dice(20)
- Döndürülen değeri kaydıran ve yazdıran bir yazdırma ifadesi ekleyin.
println("Your ${mySecondDice.numSides} sided dice rolled ${mySecondDice.roll()}!")
- Tamamlanmış
main()
işleviniz aşağıdaki gibi görünmelidir.
fun main() {
val myFirstDice = Dice(6)
val diceRoll = myFirstDice.roll()
println("Your ${myFirstDice.numSides} sided dice rolled ${diceRoll}!")
val mySecondDice = Dice(20)
println("Your ${mySecondDice.numSides} sided dice rolled ${mySecondDice.roll()}!")
}
class Dice (val numSides: Int) {
fun roll(): Int {
val randomNumber = (1..numSides).random()
return randomNumber
}
}
- Tamamladığınız programı çalıştırın. Çıkışınız aşağıdaki gibi görünmelidir.
Your 6 sided dice rolled 5! Your 20 sided dice rolled 7!
Kod yazarken kısa ve öz olmak daha iyidir. randomNumber
değişkenini kaldırabilir ve rastgele sayıyı doğrudan döndürebilirsiniz.
- Rastgele sayıyı doğrudan döndürmek için
return
ifadesini değiştirin.
fun roll(): Int {
return (1..numSides).random()
}
İkinci yazdırma ifadesinde, rastgele sayıyı almak için yapılan çağrıyı dize şablonuna yerleştirirsiniz. İlk yazdırma ifadesinde aynı şeyi yaparak diceRoll
değişkeninden kurtulabilirsiniz.
- Dize şablonunda
myFirstDice.roll()
işlevini çağırın vediceRoll
değişkenini silin. main() kodunuzun ilk iki satırı artık aşağıdaki gibi görünüyor.
val myFirstDice = Dice(6)
println("Your ${myFirstDice.numSides} sided dice rolled ${myFirstDice.roll()}!")
- Kodunuzu çalıştırın. Çıkışta herhangi bir fark olmamalıdır.
Bu, yeniden düzenleme işleminden sonraki son kodunuzdur .
fun main() {
val myFirstDice = Dice(6)
println("Your ${myFirstDice.numSides} sided dice rolled ${myFirstDice.roll()}!")
val mySecondDice = Dice(20)
println("Your ${mySecondDice.numSides} sided dice rolled ${mySecondDice.roll()}!")
}
class Dice (val numSides: Int) {
fun roll(): Int {
return (1..numSides).random()
}
}
fun main() {
val myFirstDice = Dice(6)
val diceRoll = myFirstDice.roll()
println("Your ${myFirstDice.numSides} sided dice rolled ${diceRoll}!")
val mySecondDice = Dice(20)
println("Your ${mySecondDice.numSides} sided dice rolled ${mySecondDice.roll()}!")
}
class Dice (val numSides: Int) {
fun roll(): Int {
return (1..numSides).random()
}
}
- Rastgele sayı oluşturmak için
IntRange
üzerinderandom()
işlevini çağırın:(1..6).random()
- Sınıflar, bir nesnenin planı gibidir. Değişkenler ve işlevler olarak uygulanan özellikleri ve davranışları olabilir.
- Bir sınıf örneği, genellikle fiziksel bir nesne olan bir zar gibi bir nesneyi temsil eder. Nesne üzerindeki işlemleri çağırabilir ve özelliklerini değiştirebilirsiniz.
- Sınıf tanımı için bir bağımsız değişken belirterek örnek oluşturduğunuzda sınıfa giriş iletebilirsiniz. Örneğin:
class Dice(val numSides: Int)
ve ardındanDice(6)
ile bir örnek oluşturun. - İşlevler bir değer döndürebilir. İşlev tanımında döndürülecek veri türünü belirtin ve bir şey döndürmek için işlev gövdesinde
return
ifadesini kullanın. Örneğin:fun example(): Int { return 5 }
Aşağıdakileri yapın:
Dice
sınıfınıza başka bir renk özelliği verin ve farklı sayıda yüzü ve rengi olan birden fazla zar örneği oluşturun.Coin
sınıfı oluşturun, sınıfa çevirme özelliği verin, sınıfın bir örneğini oluşturun ve birkaç madeni para çevirin. Yazı tura atmak için random() işlevini bir aralıkla nasıl kullanırsınız?