C# – Challenges | First Reverse

Bugün “Challenges | … ” başlıklı bir seriye başlamayı düşünüyorum. Coderbyte isimli kodlama değerlendirme platformundaki meydan okumalar bu seride olacak. C# öğrendiğim için istenilen kodları C# dilinde yazacağım. Yeni diller öğrendikçe bu diller değişebilir. Bu serinin ilk uygulaması “First Reverse” isimli challenge. Bu cahllenge’ın temel mantığı dizi elemanlarını / ekrandan girilen değişkenleri ters sıra ile yazdırma. ASlında daha önceki yazımda olan bir kod fakat buna rağmen kodu yazaken zorluk çektim. Hala öğrenememişim…

Challenge Türü: Easy

Detaylar

Kodumuz

  • 9. satırda reverse değişkenine bir ilk atama yapmayı unuymamalıyız. ( Burada string a = String.Empty; , string a = Null; veya string a = “”; kullanabiliriz.
  • 11. satırda for föngüsünün içerisini mutlaka (int i = str.Length – 1; i >= 0; i–) şeklinde yazmalıyız. (int i = str.Length; i > 0; i–) veya (int i = 0; i <= str.Length -1; i++) şeklinde yazmamız yanlış olur.
  • 13. satırda a değikenine i yi ekleyip devam etmek değil de i nin dizi içerisinde ifade ettiği değişkenin değerini ekleyip atamayı unutmamalıyız. (yani a += i; yazmamalıyız.) Ayrıca a = str[i]; gibi bir hata da yapmamalıyız.

Kodun Çıktısı

Hatalar

  • 11. satırda döngüyü döndürmeye sağlayacak olan int i değişkenine 0 değerini verip artırarak ilerlemek istiyor olabiliriz fakat bunu yaparken int i değişkeni ile string reverse değişkenlerini kıyaslayamayız. Türleri eşit olmalı. for (int i = 0; i <= str.Length -1; i++) veya for ( int i = str.Length -1; i >= 0; i–) yazabiliriz.
  • 11. satırda veya mutlaka for ( int i = str.Length -1; i >= 0; i–) şeklinde yazmalıyız. for (int i = 0; i <= str.Length -1; i++) şeklinde yazdığımızda kodun çıktısı yukarıdaki gibi olur. İçindeki harfleri ters çevirip yeni bir dizi oluşturmasını istediğimiz diziyi ters çevirmez. Ayrıca for (int i = 0; i < str.Length; i++) şeklinde de yazmamalıyız. Bu şekilde de hata veriyor (idk why?).
  • 13. satırda for döngüsünün içinde i‘ nin değerini direkt olarak reverse isimi string değişkene ekleyemeyiz çünkü burada i değişkeni bizim değişkenimizin değerini etkilemek / değiştirmek için kullanılmıyor. i değişkeninin kullanılma amacı reverse isimli string değişkenini bir diziye dönüştürüp bu dizinin her bir elemanının sırasını temsil etmektir. bu sayede i. eleman şudur i+1. eleman şudur gibi dizinin elemanlarını tersten yazdırmamız mümkün olacaktır.

String.Empty , “” ve Null Arasındaki Fark

İnternette araştırdığım bir kodda, bir string değişkenine şu şekilde atama yapıldığını gördüm,

string reverse = String.Empty;

daha önce karşılaşmadığım için internetten ne olduğuna baktım. Şimdi de sizlere bu edindiğim bilgileri aktarmak istiyorum.

String.Empty veya “” kullandığımız zaman aynı boş string değerini elde etmemize rağmen aralarında bir fark vardır.

  • String.Empty ile aslında bellekte herhangi bir nesne yaratmayıp sadece String altındaki Empty alanına (field) a referans vermektedir.
  • Sting a = “”; ile ise boş değerli (empty) yeni bir string nesnesi bellekte “yaratılmış” olmaktadır.

String a = null; da yine String.Empty gibi uzunluğu “sıfır” olan bir stringi represent (temsil) etmekte olup kendisine “null” değeri atanmış olup, henüz kendisinin refere ettiği bir string örneklemi bulunmadığını belirtmektedir. Not: Hatta .NET Framework bu iki durumu aynı method ile geliştiricilerin kontrol edebilmesi için String.IsNullOrEmpty methodunu barındırmaktadır.

Kaynak: Onur Güzel’in yanıtından alıntılanıp düzenlenmiştir. https://social.msdn.microsoft.com/Forums/tr-TR/28d5f5a0-bb39-4bc1-aace-6f18976964fa/stringempty-quotquot-null-arasndaki-fark-nedir?forum=csharptr