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. Bir nil map, esasen bellekte hiçbir şeyi işaret etmeyen, başlatılmamış bir map'tir. Bu kavramı anlamak çok önemlidir çünkü nil bir map'e anahtar eklemeye çalışmak, programınızın paniklemesine (panic) ve çökmesine neden olacaktır.

Bir nil map'in nasıl oluştuğu ve nasıl göründüğü aşağıdadır:

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

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

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

// Bu panik (panic) yaratacaktır!
myMap["key"] = 42

Bu sorunu önlemek için, bir map'e anahtar eklemeye çalışmadan önce her zaman nil olup olmadığını kontrol etmelisiniz. Kontrol oldukça 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ış map'lerle çalışırken programınızın çökmemesini sağlayarak kodunuzu daha sağlam ve güvenilir hale getirir.

quiz iconKendini test et

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

quiz iconKendini test et

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

quiz iconKendini test et

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

challenge icon

Görev

Kolay

Yazma işlemlerini denemeden önce nil map'leri kontrol ederek panik hatalarını önleyen güvenli bir map başlatma sistemi oluşturun. Bu zorluk, programınızı çökertebilecek işlemleri gerçekleştirmeden önce map durumunu doğrulamanın kritik önemini göstermektedir.

İki girdi alacaksınız:

  • İşlem sayısını temsil eden bir dize (örneğin, "5")
  • Şu formatta işlemler içeren bir dize: "operation1:key1:value1,operation2:key2:value2"; burada işlemler "check", "init" veya "add" şeklindedir (örneğin, "check:scores,init:scores,add:Alice:95,add:Bob:87,check:grades")

Göreviniz şunları yapmaktır:

  1. scores ve grades adında, map[string]int türünde iki map değişkenini başlatmadan oluşturun (bunlar nil olacaktır)
  2. Girdi dizesindeki her işlemi sırayla işleyin:
  3. "check" işlemleri 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" işlemleri için:
    • Belirtilen map'i make(map[string]int) kullanarak başlatın
    • "Initialized map [map_name]" yazdırın
  5. "add" işlemleri için:
    • Önce map'in nil olup olmadığını kontrol edin
    • Eğer map nil ise, "Cannot add to nil map [map_name]" yazdırın
    • Eğer map nil değilse, anahtar-değer çiftini ekleyin ve "Added [key]:[value] to [map_name]" yazdırın
  6. Girdi dizesini ayırarak işlemleri ayrıştırın:
    • Bireysel işlemleri elde etmek için virgüllere göre ayırın
    • Her işlem için, işlem türünü ve parametreleri elde etmek için iki nokta üst üste işaretine göre ayırın
    • Ekleme işlemleri için değer dizesini bir tam sayıya dönüştürün
  7. Tüm işlemleri işledikten sonra, her iki map'in son durumunu görüntüleyin:
    • Her bir map için, eğer nil ise: "Final state - [map_name]: nil"
    • Her bir map için, eğer başlatılmışsa: "Final state - [map_name]: [count] entries"; burada count, anahtar-değer çiftlerinin sayısıdır

Ekleme işlemleri için değer dizelerini tam sayılara dönüştürmek üzere strconv paketini kullanın. Bu zorluk, yazma işlemlerinden önce nil map'leri kontrol etmenin çalışma zamanı paniklerini nasıl önlediğini ve kodunuzu nasıl sağlam ve güvenilir hale getirdiğini gösterir.

Kopya kağıdı

Bir nil map, bellekte hiçbir yeri işaret etmeyen, başlatılmamış bir map'tir. Bir nil map'e anahtar eklemeye çalışmak, programınızın paniklemesine (panic) ve çökmesine neden olur.

Bir map'i başlatmadan deklare etmek, bir nil map oluşturur:

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

Bir nil map'ten okuma yapmak güvenlidir (sıfır değer döndürür), ancak ona yazmaya çalışmak panik oluşturur:

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

// Bu panik oluşturacaktır!
myMap["key"] = 42

Anahtar eklemeden önce her zaman bir map'in nil olup olmadığını kontrol edin:

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

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 tanımla (nil olacaklar)
	var scores map[string]int
	var grades map[string]int
	
	// İşlemleri virgüle göre ayır
	operations := strings.Split(operationsStr, ",")
	
	// TODO: Kodunuzu aşağıya yazın
	// Her işlemi sırayla işle
	// "check", "init" ve "add" işlemlerini ele al
	// Ekleme (add) işlemleri için, değer dizesini tam sayıya dönüştürmek üzere strconv.Atoi() kullanın
	
	// Her iki map'in son durumunu yazdır
	// Map'lerin nil mi yoksa başlatılmış mı olduğunu kontrol edin ve buna göre yazdırın
}
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