Menu
Coddy logo textTech

Nil Map Kontrolü

Coddy'nin GO Journey'sinin Mantık ve Akış bölümünün bir parçası. Ders 28 / 68.

Go'da bir map, nil adı verilen özel bir duruma sahip olabilir. nil map, esasen bellekte hiçbir şeyi göstermeyen başlatılmamış bir map'tir. Bu kavramı anlamak çok önemlidir; çünkü nil bir map'e anahtar eklemeye çalışmak programınızın paniğe kapılmasına ve çökmesine neden olur.

Bir nil map'in nasıl oluştuğu ve neye benzediği aşağıda açıklanmıştır:

var myMap map[string]int
// myMap bu noktada nil

Bir map değişkenini başlatmadan bildirdiğinizde Go, onu otomatik olarak nil olarak ayarlar. nil bir map'ten güvenle okuyabilirsiniz (sıfır değerini döndürür), ancak ona yazmaya çalışmak panic'e neden olur:

// Bu güvenli - 0 döndürür
value := myMap["key"]

// Bu panik yapacak!
myMap["key"] = 42

Bu sorunu önlemek için, map'e anahtar eklemeye çalışmadan önce map'in nil olup olmadığını her zaman check etmelisin. check basittir:

if myMap == nil {
    myMap = make(map[string]int)
}
myMap["key"] = 42 // Artık bu güvenli

Bu basit kontrol, potansiyel olarak başlatılmamış eşlemelerle çalışırken programınızın çökmesini önleyerek kodunuzu daha sağlam ve güvenilir hâle getirir.

challenge icon

Görev

Kolay

Yazma işlemlerini gerçekleştirmeye çalışmadan önce nil map'leri kontrol ederek panic hatalarını önleyen güvenli bir map initialization sistemi oluşturun. Bu challenge, programınızı çökertebilecek işlemleri gerçekleştirmeden önce map durumunu doğrulamanın kritik önemini gösterir.

İki girdi alacaksınız:

  • İşlem sayısını temsil eden bir string (ör. "5")
  • Virgüllerle ayrılmış işlemleri içeren bir string. Her işlem, üzerinde çalıştığı map'i belirtir:
    • "check:[map_name]"
    • "init:[map_name]"
    • "add:[map_name]:[key]:[value]"
    Örneğin "check:scores,init:scores,add:scores:Alice:95,add:scores:Bob:87,check:grades"

Göreviniz:

  1. map[string]int türünde, scores ve grades adlarına sahip iki map değişkeni oluşturun ve bunları initialization yapmadan bırakın (nil olacaklardır)
  2. Girdi string'indeki her operation'ı sequentially işleyin:
  3. "check" operations için:
    • Belirtilen map'in nil olup olmadığını kontrol edin
    • Map nil ise "Map [map_name] is nil" yazdırın
    • Map nil değilse "Map [map_name] is initialized" yazdırın
  4. "init" operations için:
    • Belirtilen map'i make(map[string]int) kullanarak initialize edin
    • "Initialized map [map_name]" yazdırın
  5. "add" operations için:
    • Önce map'in nil olup olmadığını kontrol edin
    • Map nil ise "Cannot add to nil map [map_name]" yazdırın
    • Map nil değilse key-value çiftini ekleyin ve "Added [key]:[value] to [map_name]" yazdırın
  6. Girdi string'ini bölerek operations'ı ayrıştırın:
    • Tek tek operations'ları elde etmek için virgüllerden bölün
    • Her operation için operation türünü ve parametreleri elde etmek üzere iki nokta üst üste işaretlerinden bölün
    • "add" operations için value string'ini integer'a convert edin
  7. Tüm operations işlendikten sonra her iki map'in final durumunu görüntüleyin:
    • Her map için nil ise: "Final state - [map_name]: nil"
    • Her map için initialized ise: count'un key-value çiftlerinin sayısı olduğu "Final state - [map_name]: [count] entries"
    • Operations bunları hangi sırada kullanmış olursa olsun, önce scores sonra grades yazdırın

strconv package'ını, "add" operations için value string'lerini integer'lara convert etmek üzere kullanın. Bu challenge, write operations öncesinde nil map'leri kontrol etmenin runtime panic'lerini nasıl önlediğini ve kodunuzu sağlam ve güvenilir hâle getirdiğini gösterir.

Kendin dene

package main

import (
	"fmt"
	"strconv"
	"strings"
)

func main() {
	// Girdiyi oku
	var numOpsStr string
	var operationsStr string
	fmt.Scanln(&numOpsStr)
	fmt.Scanln(&operationsStr)
	
	// Map'leri başlatmadan bildir (nil olacaklar)
	var scores map[string]int
	var grades map[string]int
	
	// İşlemleri virgülle ayır
	operations := strings.Split(operationsStr, ",")
	
	// TODO: Kodunu aşağıya yaz
	// Her işlemi sırayla işle
	// "check", "init" ve "add" işlemlerini ele al
	// add işlemleri için, değer string'ini tamsayıya dönüştürmek için strconv.Atoi() kullan
	
	// Her iki map'in son durumunu yazdır
	// Map'lerin nil veya başlatılmış olup olmadığını kontrol et ve buna göre yazdır
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık ve Akış bölümündeki tüm dersler

Kendi başına pratik yap: Online Go derleyicisi