Meraklı bir bilgisayar programcısının notları.
Merhaba! Ben Burak Selim Şenyurt - yazılım geliştirici, blogger ve öğrenme tutkunu.
Bu blogda yazılım mühendisliği, sistem tasarımı, programlama dilleri ve yeni teknolojiler üzerine yazılar paylaşıyorum. Özellikle .NET, Rust, Zig, yapay zeka araçları ve mimari konularına ilgi duyuyorum. Kendimi sürekli geliştirmeye ve yeni şeyler öğrenmeye adıyorum.
-
Ruby Kod Parçacıkları - 6 (Sınıflarda Accessor, Setter ve Attribute Kullanımları)
Nesne yönelimli dillerde sınıfların birer varlık (Entity) olarak düşünüldüğüne sıklıkla şahit oluruz. Bu sayede bir Domain’e özgü gerçek dünya varlıklarının tasarlanması ve örneklenerek kullanılması mümkün hale gelir. Üstelik Domain içinde dolaşımda olacak anlamlı nesneler ortaya çıkar. Çok doğal olarak her bir varlığın karakteristik özellikleri bulunur. Nitelik (attribute) olarak da düşünebileceğimiz bu özellikler ilgili varlığın çalışma zamanı (Runtime) durumu hakkında bilgiler taşır. Aslında.Netçi gözüyle bakıldığında sınıf ve özelliklerinden bahsettiğimizi anlamışsınızdır.
-
Ruby Kod Parçacıkları - 5 (Sınıf Kavramına Giriş)
Bilindiği üzere Ruby nesne yönelimli bir programlama dilidir. Bu yüzden Ruby dilinde her şey bir nesne olarak düşünülür. Dolayısıyla OOP dillerin Kalıtım (Inheritance), Encapsulation (Kapsülleme), Çok Biçimlilik (Polymorphism) gibi temel özelliklerini bünyesinde barındırır. Elbette en küçük yapı taşı sınıflardır (Class). İzleyen kod parçacığında basit olarak bir sınıfın nasıl tanımlandığına yer verilmektedir. Bu anlamda değişken türlerinden (Instance,Class ve Global Variable), sınıf yapıcılarından (initialize), nesne örnekleme operasyonlarından (new), standart sınıf içi metod tanımlamalarından (def) ve metod ezme (overriding) gibi işlemlerden kısaca bahsedilmektedir.
-
Ruby Kod Parçacıkları - 4 (Control Statements, Loops, Statement Modifiers)
Her programlama dilinde olduğu gibi Ruby içinde kontrol ifadeleri (Control Statements) ve döngüler (Loops) söz konusudur. Tabi Ruby dili özellikle yazımsal kolaylık açısından pek çok geliştiriciyi gülümseten betiklere de sahiptir. İlerleyen kod parçasında bu konudaki en temel kullanımları inceliyoruz.
-
Ruby Kod Parçacıkları - 3 (Range Kullanımı)
Range sınıfı ile başlangıç ve bitiş değerleri belli olan aralıklar tanımlanabilir. Bu aralığa ait değerler sayısal veya metinsel olabileceği gibi kullanıcı tanımlı sınıf örnekleri de olabilir (Bu benim için de henüz ileri seviye bir konu olduğundan ilerleyen günlerde değinmeye çalışacağım) Gelin bu aralıkların Ruby programlama dilinde nasıl kullanıldığına kısaca bakalım.
-
Ruby Kod Parçacıkları - 2 (Hashes)
Ruby programlama dilinde de veri yapıları (Data Structures) oluşturmak için kullanılan tiper vardır. Dictionary benzeri koleksiyon olarak kabul edebileceğimiz Hash sınıfı bunlardan birisidir. Benzersiz anahtar (key) ve değer (value) çiftlerinden oluşan Hash nesne örneklerinin kullanımı oldukça kolaydır.
-
Ruby Kod Parçacıkları - 1
Bir programlama dilini öğrenmenin en iyi yolu elbetteki bol bol kod yazmaktan geçer. En azından belirli bir seviyeye gelene kadar basit IDE’ler ile mümkünse Console ekranları üzerinden çalışarak ilerlemekte yarar vardır. Hazır bu aralar Ruby ile haşır neşir iken hem basit kod parçaları paylaşayım hem de bu eğlenceli dili birlikte öğrenelim istedim. İşte ilk kod parçacığımız. Konumuz, diziler (Arrays).
-
Ruby Maceralarım
Kırklı yaşlarına gelmekte olan bir yazılımcıyım ve uzun zamandır bu işin içerisindeyim. Fark ettim ki yeni bir şeyler araştırmadan rahat edemiyorum. Belki hep.Net üzerine yoğunlaştım ancak zaman zaman farklı alanlara da göz atıyorum. Bu düşüncelere sahip olduğum dönemlerde ağırlıklı olarak farklı programlama dillerini tanımaya çalışıyorum. Zamanında az da olsa Haskell, Scala, Go gibi dillere bakmıştım. Hatta çok uzun zaman önce ciddi olarak Java platformu ile ilgilenmiştim. Farklı programlama dillerini incelemek bir yazılımcı için önemli. Bu sayede örneğin fonksiyonel programlama gerçekten ne anlama geliyor veya dinamik dil denince ne ifade edilmek isteniyor daha kolay anlaşılabiliyor.
-
Tek Fotoluk İpucu 119 - En Keyifli Validation
Hani şu NuGet paketlerine bakıyoruz ya bir süredir. Hatta bazılarını alıp basit Hello World uygulamalarını geliştiriyoruz. Aslında nasıl kullanıldıklarını öğrenmenin dışında GitHub gibi Repository’ler üzerinde tutulan kodlarına bakamamızda da büyük yarar var biliyor musunuz? Çünkü çoğu, nesne yönelimli programlamanın temel dinamiklerini içeriyor ve hatta yazılım prensipleri ile tasarım kalıplarını başarılı bir şekilde uyguluyor.
-
Tek Fotoluk İpucu 118 - Fluent Command Line Parser ile Hello World
Nesne Yönelimli Programlama Dillerinin (Object Oriented Programming Languages) kullanıcılarını büyülediği pek çok nokta var. Örneğin Fluent API’ler bunlardan sadece birisi ve getirdiği güzellikleri pek çok bağımsız üründe de görebiliyoruz (Bu arada Fluent API geliştirilmesi ile ilgili olarak şu eski anlatıma bakabilirsiniz)
-
Tek Fotoluk İpucu 117 - LINQtoExcel ile Hello World
Yine çok sıkıldığınız günlerden biri ve siz şöyle bir yarım saatlik kodlama uğraşı arıyorsunuz. Hani yeni birNuGet paketi denesem nasıl olur diyorsunuz belki de. Hatta azcık da zorlayıcı bir paket olsa, yükleyince hemen çalışmasa ama çok da vaktimi almasa derdindesiniz. Bir bakıyorsunuz karşınızda Excel dosyalarında LINQ (Language INtegrated Query) sorguları yazabilmenizi sağlayan LINQtoExcel. Hemen örnek bir Exceldosyası oluşturuyorsunuz belki de.
-
Tek Fotoluk İpucu 116 - Sayısal mı?
Oldu ya geliştirdiğiniz projenin bir yerinde, koda düşen metinsel bazı değişkenlerin sayısal olup olmadığını tespit etme ihtiyacı duydunuz. Söz gelimi bir Excel dokümanı içerisinden aldığınız hücre değerlerinin sayısallığını kontrol etmek ve buna göre program akışını yönlendirmek gerekiyor.
-
Tek Fotoluk İpucu 115 - C# 6.0 Pratikleri (Dictionary Initializer)
Bir önceki tek fotoluk ipucunda belirttiğimiz üzere C# 6.0 ile dile kazandırılan bazı kabiliyetler kodun kolay okunabilir olması açısında önem arz ediyorlar. Örneğin generic bir Dictionary koleksiyonunu örneklemek için aşağıdaki fotoğrafta görülen yeni yazım dizimini kullanabiliyoruz. Daha okunabilir ve anlaşılır olduğu şüphesiz.
-
Tek Fotoluk İpucu 114 - C# 6.0 Pratikleri (Expression-Bodied Function ve String Interpolation)
Eric Vogel’e göre C# 6.0 ile birlikte dile kazandırılan yenilikler kodun daha kolay okunabilmesini sağlamaktaymış. Örneğin Expression-Bodied fonksiyonlar bu kapsamda değerlendirilebilirler. Diyelim ki elinizde bir POCO (Plain Old CLR Object) tipi var ve ToString metodunu ezeceksiniz (Override). Dile gelen yeni kabiliyetler ile söz konusu metodu aşağıdaki gibi yazma imkanımız var. (Metod gövdesinde string Interpolation özelliğini kullandığımıza da dikkat edelim)
-
Tek Fotoluk İpucu 113 - Dapper.Net ile Hello World
Gecenin bir yarısı. Bilgisayarınızın başındasınız. Önünüzde Visual Studio. Yanınızda kahveniz/çayınız. Canınız da sıkılmış. Acaba ne yapsam da vaktimi iyi değerlendirebilsem diye düşünüyorsunuz. Böyle hallerde şöyle bir NuGet paketi bulup araştırmak bünyeye iyi gelebiliyor. Bunun için Nuget Must Haves isimli siteyi ziyaret edebilirsiniz.
-
Tek Fotoluk İpucu 112 - Acaba Bu Dosya Microsoft Office Open XML(OOXML) Formatında mı?
Diyelim ki bir yerlerde saklanmış ve kod tarafında byte[] array olarak ifade ediebilecek çeşitli tipte dosya içerikleriniz var ve siz bunların Microsoft Office Open XML formatında olup olmadıklarını anlamak istiyorsunuz. Bir süreci başlatmadan önce DB gibi bir ortamda duran dosyaların gerçekten de istenen tipte olup olmadığını anlamak kritik bir operasyon olabilir. Peki bu tip bir kontrolü gerçekleştirmek için nasıl bir kod parçasına ihtiyacımız olur?
-
Tek Fotoluk İpucu 111 - Dosya Adı İçinden Geçersiz Karakterleri Çıkartmak
Diyelim ki elinizde bir takım dosya adları var. Bu dosya adları herhangi bir kaynaktan okunuyor. Ancak bazı dosya adlarında geçersiz karakterler yer aldığını tespit ediyorsunuz (?: < vb) Siz de dosya adlarını kendi uygulamanız içerisinde değerlendirirken bu geçersiz karakterlerden arındırarak hareket etmek niyetindesiniz. Ne yaparsınız? Bunun için bir genişletme fonksiyonu (extension method) yazmak isteseniz nasıl hareket edersiniz? Yoksa aşağıdaki gibi bir metod işinize yarar mı?
-
SOA Nedir?
Yazılım dünyasının zor anlaşılan kavramlarından birisi de çeşitli mimari modellemeleridir. SOA (Service Oriented Architecture) en popüler yazılım mimarilerinden birisi olmakla beraber, anlaşılması ve uygulanması en zor olanlarındandır. Gelin SOA’yı dilimiz döndüğünce anlamaya ve en önemlisi hangi ihtiyacı/ihtiyaçları çözdüğünü bulmaya çalışalım. İlk olarak basit ve genel bir tanımlama ile işe başlamakta fayda var.
-
Tasarım Desenleri – Template Method
Düzenli olarak teknik paylaşımlarda bulunan internet yazarlarının karşılaştığı en büyük sorunlardan birisi, hızla gelişen teknoloji nedeniyle ele alınan konuların kolayca eskimesidir. Hangi firma olursa olsun bu kural geçerlidir. Bu eskitme işinde elbette başı çeken bir kaç firma var. Zaman zaman yazarların serzenişte bulunup kızdığı Microsoft, Oracle, Google ve diğerleri.
-
WCF 4.5–Built-In UDP Desteği
Hızzzzz!!! Ben Hızzımmm! Hızlıdan hızlı…Bu repliği bu aralar haftada en az 7 kere seyretmek zorunda kaldığım Cars filminden hatırlıyorum (Pixar’ ın efsane çizgi filmlerinden birisi olmakla birlikte serinin 2nci filmi de süperdir. 3ncü çekilir mi bilemem ama çekilse harika olur) Şimşek McQueen filmin baş ve ana karakteri olarak çok hızlı bir arabadır ve tek derdi çok daha hızlı gitmektir. Hatta serinin ikinci bölümüne kapıştığı Formula 1 arabası dahil pek çok çeşitteki yarış otomobilini sürekli geride bırakır. Bunların arasında ralli araçlarından tutun, LeMans’ da yarışlanlara kadar pek çok çeşit vardır.
-
Managed Extensibility Framework - Hello World
Günümüzde uygulamaların genişletilebilir olması önemli bir konu. Modüler olarak da nitelendirebileceğimiz bu felsefe ile bir uygulamanın kullanıcıları tarafından kolayca genişletilebilmesi amaçlanır. Hatta akıllı uygulamaların kendilerini bu şekilde genişletmesi de mümkündür. Modülerliği kazandırmak için kullanabileceğimiz farklı yöntemler vardır. Bunlardan belki de en basiti Interface tiplerini ve Reflection’ı kullanarak uygulamanın standart fonksiyonelliklerini genişletilebilir şekilde dışarıya açmaktır. Basittir ancak geliştiricinin iyi tasarlamasını gerekitir ve kod maliyeti yükselebilir.