Go öğreniyorum - Gün 3

`Introducing Go` kitabından bugün öğrendiklerim

Bugün kontrol yapıları yani Control Structures’ı öğrendim.

Chapter 4

for İfadesi

for bize, bir list içindeki ifadeleri birden çok defa tekrar etmemizi sağlayan bir mekanizma. Zaten neredeyse tüm dillerde olan birşey. 1’den 10’a kadar olan sayıları yazdırmak istesek arka arkaya 10 tane fmt.Println kullanabiliriz. Bunun yerine;

package main

import "fmt"

func main() {
  i := 1                   // i 1 olsun
  for i <= 10 {            // i, 10’dan küçük ya da eşit olduğu sürece ya da
      fmt.Println(i)       // ekrana i’yi yazdır
      i = i + 1            // i’yi 1 arttır
  }
}
  • Önce i adında bir değişken tanımla
  • for ile bir döngü oluştur ve bir şart koş!
  • Bu durum true olduğu sürece {} içindeki kodu çalıştır!

Diğer dillerdeki do, until, while gibi değişik döngü mekanizmaları Go’da YOK! Çünkü sade bir dil. Yani döngü yapılacağı zaman aklımıza for gelecek! Aynı işi şu şekilde de yapabilirdik:

func main() {
    for i := 1; i <= 10; i++ { // tanımlama, koşul ve arttırma tek satır!
        fmt.Println(i)
    }
}

Bu daha C tarzı, Javascript tarzı gibi…

if İfadesi

1’den 10’a kadar olan sayıları ekrana yazarken, sayının tek mi? çift mi? olduğunu da göstermek istesek ne yapmamız gerekir di? Bir noktada sayıyı ekrarana basarken tek ya da çift olup olmadığını kontrol etmemiz gerekirdi.

if i % 2 == 0 {
    // çift sayı
} else {
    // tek sayı
}

if anahtar kelimesinden sonra koşul tanımlıyoruz. Eğer bu koşul true ise {} içinde kalan kod çalışıyor. Yine pek çok programlama dilinden aşina olduğumuz bir yapı.

package main

import "fmt"

func main() {
    for i := 1; i <= 10; i++ {
        if i % 2 == 0 {
            fmt.Println(i, "çift sayı")
        } else {
            fmt.Println(i, "tek sayı")
        }
    }
}

Eğer 2’ye tam bölünebiliyorsa? ya da 3’e tam bölünebiliyorsa? ya da 4’e tam bölünebiliyorsa?

if i % 2 == 0 {
    // 2’ye tam bölünebiliyor
} else if i % 3 == 0 {
    // 3’e tam bölünebiliyor
} else if i % 4 == 0 {
    // 4’e tam bölünebiliyor
}

gibi kullanabiliriz.

switch İfadesi

Şimdi eğer sayı 1 ise “Bir”, 2 ise “İki” … 10 ise “On” yazan bir programa ihtiyacımız olsaydı:

if i == 0 {
    fmt.Println("Sıfır")
} else if i == 1 {
    fmt.Println("Bir")
} else if i == 2 {
    fmt.Println("İki")
}

gibi mi yapmak lazım? Bu tür durumlarda switch yardıma geliyor.

switch i {
case 0: fmt.Println("Sıfır")
case 1: fmt.Println("Bir")
case 2: fmt.Println("İki")
default: fmt.Println("Bilinmeyen sayı")
}

switch anahtar kelimesinden sonra kontrol ifadesini veriyoruz. Örnekte switch i derken, i’nin alacağı değere göre bu switch mekanizması çalışacak.

Bütün case ifadeleri aynı if deki gibi yukarıdan aşağı şekilde sırayla çalışacak, ilk başarılı olanı yakalayacak. Eğer durumların hiçbiri tutmuyorsa default olarak tanımlanan şeyi yapacak.

Aynı şekilde diğer dillerde de benzer durumlar var.

Ödev

Aşağıdaki program ne çıktı verir?

i := 10
if i > 10 {
    fmt.Println("Büyük")
} else {
    fmt.Println("Küçük")
}

1-100 arasındaki tüm sayıları ekrana 3’er 3’er yazın. (3,6,9 gibi…)

1-100 arasındaki sayıları yazarken, 3’ün katlarında “Fizz” yazın sayı yerine, 5’in katlarında da “Buzz” yazın. Hem 3 hem de 5’in katı ise (örneğin 15) “FizzBuzz” yazın :)