C# – Challenges | Longest Word

Merhaba, bugün bahsedeceğim örnek kod, konularına tam anlamıyla hakim olduğum bir kod değil fakat bazı araştırmalar ve okumalar yaparak belli bir yere kadar ilerleme kaydettim ve bu kodu yazabildim. Bir sıkıntımız daha var ki, bu kodu yazmayı ve araştırmalarımı 8 Aralık 2019 Pazar günü tamamlamama rağmen yazısını bugün yani 26 Ocak 2020 Pazar günü yazabiliyorum. Açıkçası kodun ayrıntılarını maalesef unutmuşum. Şimdi sizlere anladığım ve hatırladığım kadarını aktarmaya çalışacağım.

Challenge Türü: Easy

Detaylar

Kodumuz

  • 2. satırda System.Linq kütüphanesi kullanılmalı. Kullanılmazsa 13. satırdaki, dizi elemanlarının büyükten küçüğe doğru sıralanması için kullandığımız OrderByDescending kodu çalışmaz. LINQ sorgusu hafızadaki (veya bir veri kaynağındaki) veri kümesinden program içinde SQL gibi sorgulama yaparak, seçilen verilerden oluşan yeni bir liste elde etmemizi sağlar. Linq hakkında daha fazla detay için bakabilirdiniz -> http://yazilim.cevapsitesi.com/Makaleler/5/linq-language-integrated-query-dile-entegre-edilmis-sorgu-nedir
  • 9. satırda kullandığım ayrac dizisini, yani bölmek istediğim cümledeki sözcükleri birbirinden ayıracak olan sembolleri ve boşluklarları tek tek kendim yazmak durumundayım. Buna maalesef alternatif bir çözüm bulamadım. Sıkıntı şu ki, benim orada tüm karakterleri yazmam mümküd değil ve benim yazmadığım bir sembol ile karşılaşılırsa kelimeleri ayrıması mümkün olmayacak. Örneğin kod ekrandan merhaba%okuyucu şeklinde bir girdi alsın. Bu yadığım kodda % sembolü bir ayraç olarak ifade edilmediği için buradaki merhaba ve okuyucu kelimeleri seçilemeyecek. Bunun yerine merhaba%okuyucu yu tek bir kelime olarak alacak. Bu satırdaki kod hatalı değil fakat eksiktir.
  • 10. satırda bir önceki yazımda da bahsettiğim .Split ifadesi yer alıyor. .Split() ifadesinde parantez içine yazdığımız şeyler bizim ayraçlarımız/bölücülerimiz oluyor. Kodumuz parantez içinde ne varsa, istenileni o ifadeyi gördüğü zamanlarda bölerek bir dizi haline getiriyor.
  • 13. satırda OrderByDescerding kodu sayesinde dizimizin elemanlarını büyükten küçüğe sıralayabiliyoruz. (Bu arada büyükten küçüğe, uzundan kısaya için Descending; küçükten büyüğe, kısadan uzuna için Ascending kullanılır.)

Kodun Çıktısı

Hatalar

  • Hatalı kodda 10. satır, ana kodda 13. satırda olan First() ifadesinin neden yazıldığına tam olarak hakim değilim fakat ortadan kaldırdığımızda aşağıdaki gibi bir hata veriyor. Anladığım kadarıyla En büyükten en küçüğe(en uzundan en kısaya) doğru sıraladığımız sözcük dizimizde tek bir elemanı seçip döndürmemiz geremiyor, bu da en uzun sözcük olan dizinin ilk eleman olduğu için First() ifadesi kullanılıyor. (asaba Last() gibi (dizinin son elemanı) ifadeler de var mı, kullanılıyor mu?)
hatalı kodun çıktısı böyle

C# – .Split fonksiyonu kullanımı

string.Split yöntemi, veri tabanında belirli işaretlere göre tek bir alanda tutmak istediğimiz kayıtları, bir veya daha fazla sınırlayıcı temelinde bölerek bir alt dizeler dizisi oluşturur. Genellikle bir dizeyi sözcük sınırlarında ayırmanın en kolay yoluymuş. Ayrıca, diğer belirli karakter veya dizelerde dizeleri ayırmak için de kullanılıyormuş

Split metodunun temel çalışma şekli şöyledir. Bir dizgeyi (karakter dizisi) belirli bir ayraç ile parçalayıp, parçalardan bir dizi döndürür.

Kullanım 1: C# string nesneleri ile kullanılır.  Aşırı yüklenmiş bir metottur fakat en sık kullanım şekli ayırıcı olarak bir karakter(char) girilmesi ile yapılır.

Kullanım 1.1
Kullanım 1.2
Kullanım 1 Çıktısı

Kullanım 2: C# split metodunun aşırı yüklenmiş bir metot olduğunu yazmıştım. Karakterlerden oluşan bir dizi ile birden fazla karakter ile de parçalamak mümkündür.

Örnek: 2019/12/07 18:06 şeklindeki tarihi parçalara ayırma

Kullanım 2
Kullanım 2 Çıktısı

Hatalar

  • Saati 18.06 şeklinde yazdığım ve ayrac dizisine . (nokta) elemanını eklemediğim için kodu yazdıramadım. Hata verdi. Aslında kod yazmayı bitirip derlendiğinde bir hata görünüyor fakat çalıştırmak istediğimizde özel bir hata oluşuyor. Syntax hatası olmamamsı kodun doğru olduğunu göstermez. Bu özel hata ile ilgili daha fazla detay isterseniz şu linkteki yazıyı inceleyebilirsiniz: https://docs.microsoft.com/tr-tr/dotnet/api/system.indexoutofrangeexception?view=netframework-4.8

Bu yazıyı yazarken yararlandığım kaynaklar: