Kayıtlar

Eylül, 2017 tarihine ait yayınlar gösteriliyor

Kotlin - 13 - Fonksiyonlar (1. Bölüm)

Resim
Kotlin de fonksiyon tanımı “fun” anahtar kelimesi ile yapılır, kullanımı yani çağırımı ise daha standart bir yol ile alışıla gelen tarzdadır. Parametreler pascal notation’ı kullanılarak tek tek tanımlanmalıdır. İnitial değerler parametre tanımı esnasında yapılabilir. İnitial değer atamaları overload ihtiyaçlarını azaltacaktır, Ancak dikkat edilmesi gereken nokta overload yapılan method larda initial değer desteklenmez, method imza kısmından initial değer atama kısmı kaldırılmalıdır. Initial değer içeren bir değer kullanılacak ise, named parameter olarak değerler geçilmelidir. Named parameter kullanımı , çok parametreli method ların çağrılması adımında kod’un okunaklı olması adına oldukça faydalı olacaktır. Sıralı parametreler named argument olmaksızın kullanılabilir ancak arada atlanan parametre olduğunda artık kullanılamaz. Eğer fonksiyonumuz dönüşsüz olacaksa tipini “: Unit” olarak tanımlayabiliriz, ya da Unit opsiyonel bir tip olduğu için hiç yazmadığımı...

Kotlin - 12 - Delegasyon ve Delege Özellikler

Resim
Delegasyon: Delegasyon implemantation için oldukça iyi bir alternatif, Kotlin bunu oldukça kolay ve az bir kod ile destekler.  Aşağıdaki örnekte “Base” interface ini miras alan ve tüm public method larını destekleyen “Derived” adında sınıf yaratılıyor. “by b” ifadesi “b” nin “Derived” class’ı içinde obje olarak tutulacağını ifade ediyor ve derleyici “Base” in tüm method larını “b” için yaratacak. Yinede override etmek mümkün. Delegate edilmiş özellikler: Bazı durumlarda genel değişkenler olur ve sürekli manuel olarak eklememiz gerekiyor, her şey için bir kere eklemek iyi olabilir, bu doğrultuda ve aşağıdaki 3 fayda (Belkide fazlası) için Kotlin Delege özellikleri kullanır. Lazy properties: değer sadece ilk erişimde hesaplanır. Observable (gözlemlenebilir) properties: listener lar tarafından değer değişiklikleri yakalanır. Her alan için ayrı özellik tutmak yerine map içinde tutmak. Kotlin’de (1.1 sonrası) delege özellikler fonksiyon veya kod bloğu iç...

Kotlin - 11 - Nesneler

Resim
Object Expressions: Bir sınıf tan obje yaratmak için aşağıdaki şekilde tanım yapabiliyoruz, Örnekte “ab” isminde “A” ve “B” kullanılarak bir obje yaratılıyor. Dikkat edilecek bir diğer konuda “A” sınıfının constructor method’u input aldığı için oluşturma esnasında initial değerin sağlanması gerekiyor. Eğer sadece obje yaratmamız gerekiyor, ancak kalıtma ihtiyacımız yok ise: Object declarations: Obje tanımları local olamaz, mesela fonksiyon içinde nested olarak yer alamaz, ancak başka bir obje içinde nested olabilir. Bir class’ın içindeki obje tanımı “companion” ketword’ü ile işaretlenebilir. Expressions - Declarations: Expressions ilk anda initialize edilir ve çalıştırılır. Declarations laziy initialize olur ve ilk çağrımda çalışır. “companion” nesne ilgili class yüklendiğinde initialize edilir.

Kotlin - 10 - Sınıf Tipleri

Resim
Data Class: İş gerçekleştirmekten ziyade veri (Data) tutmak için oluşturduğumuz sınıflardır. Kotlinde bu tarz sınıfları sadece “class” yerine “data class” olarak iaretlersek, compiler birincil oluşturucu method’ u baz alarak aşağıdakileri tüm tanımlı özellikler için otomatik olarak oluşturur.             Equals() / hasCode()             toString() (“User(name=John, age=42)” şeklinde)             componentN() fonksiyonlar             copy() (bazı değerlerini koruyaran ufakdeğişikle kopyasını yaratır) Tutarlılığı sağlamak ve anlamlı olması adına Data sınıflarının tanımı için şunlar gerekir: Birincil oluşturucu method (primary constructor) en azından 1 parametre içermeli. Tüm birincil oluşturucu parametreleri “var” veya “val” olarak işaretlenmeli. Data sınıfları abstract, open, sealed veya inner olamaz. Ve sadece interface implement edebili...

Kotlin - 9 - Görünürlük ayarı Extension Method

Resim
Sınıf, Obje, interface, constructors, fonksiyonlar, özellikler ve getter setter method ları visibility modifier içerebilir. 4 görünürlük söz konusu.  Local tanımlı değişken, sınıf yada fonksiyonlar visibility modifiers kullanamaz. Package: Özellikle tanımlanmaz ise ön tanımlı olanı “public” tir. " public" – Bu objenin her yerden erişilebilir olduğu anlamına gelir. "private" – Tanımı içeren dosya içinde erişilebilir. " protected "  - üst seviye tanımlar için kullanılabilir değil       "internal" – aynı modül (Kabaca birlikte derlenen dosyalar.) içinde erişilebilir. Sınıf ve interface: Özellikle tanımlanmaz ise ön tanımlı olanı “public” tir. "public" – tanımlı classı gören her yerden erişilebilir. "private" – Tanımı içeren Sınıf, ve memberları içinde erişilebilir. "protected”  - private + alt sınıflarda (bu sınıftan türetilen sınıflarda) erişilebilir. "internal” – aynı modül içindeki tan...

Kotlin - 8 - interface ve implemantasyonu

Resim
Kotlin deki Interface kavramı Java 8 e oldukça yakın, method implement edebileceği gibi abstract method tanımıda içerebilirler. Abstract sınıflardan ayrıldıkları nokta ise şudur, Interface ler durum saklayamazlar. Interface lere özellik eklemek mümkün, eklenen özellik abstract olabileceği gibi override edilmiş getter ve setter method ları barındırabilir, Ancak Interface te backing field olamayacağı için bu şekilde erişim sağlanamaz. Override çakışmalarını önleme: Birden fazla Interface (A, B) kullanılarak bir class (C) oluşturulduğunda “<interface_name>.” İle çalışması istenen fonksiyon “super” keyword’ü ile çağrılabilir, aksi durumda hangisini çağıracağını sistem kestiremez. Aşağıdaki Örnekte C class’ına f1() özelinde B Interface’ini referans almasını söylemiş oluyoruz. class C : A , B { override fun f1 ( ) { super < B > . f1 ( ) }

Kotlin - 7 - Özellikler ve Alanlar (Properties and Fields)

Resim
Özellik (Property) Tanımlama: Kotlin’ de değişebilen özellikler “var” ile read-only olanlar ise “val” ile tanımlanabilir. Özelliğe erişmek için basitçe adı ile kullanmak yeterlidir. Property tanımlama için ideal syntax aşağıdaki gibidir. var < propertyName > [ : < PropertyType > ] [ = < property_initializer > ] [ < getter > ] [ < setter > ] getter ve setter method ları opsiyoneldir, “val” değişken tanımlandığında default getter method’u kullanılır ancak setter tanımlanmaz zira değişken mutuable değildir. Normalde kotlinde field kullanışlmaz, ancak bazen gerekli oluyor örnek olarak getter setter larda olduğu gibi erişim sağlamak istediğinizde Kotlin otomatik olarak “Backing field” yaratır, Bu sayede değişkenin değerine sadece accessors lardan olmak kaydı ile “field” keyword’ü ile ulaşabiliriz. Eğer “field” (backing field) kullanımı işinizi görmez ise standart yaklaşım kullanabilirsiniz.  Aslında Bu ksım Java da ki ile ayn...

Kotlin - 6 - Sınıflar

Resim
Class (Sınıf): “class” kelimesi ile tanımlanır, “constructor   ” ifadesi de oluşturucu methodun tanımlanmasını sağlar ve süslü parantezler içerisinde detaylanır. Tanımı 2 kısımdan incelemek mümkün,   “class header” – isminin, tip parametrelerinin ve birincil constructor fonksiyonundan oluşan kısım  “class body” – Süslü parantezler arasındaki kısım. Kotlin’de her iki kısımda isteğe bağlıdır. Eğer Body kısmı boş kalacak ise süslü parantezler kullanılmayabilir. Eğer birincil constructor method anotation ya da visibility modifier içermiyor ise ilgili keyword kullanılması zorunlu olmaz ve kısaltılabilir. Constructor parametreleri bu methoda ilişkin kodu barındıran body kısmındaki “init” olarak adlandırılan initializer blokta kullanılabilir. Birincil constructor da tanımlanan parametreler değişebilir “var” veya read-only  “val” olarak oluşturulabilir.  İkincil Cunstructor: Class bir ve birden çok ikincil oluşturucu method içerebilir, bu meth...

Kotlin - 5 - Dönüşler ve Atlamalar (Returns and Jumps)

Resim
Kontlinde temel olarak 3 atlama Komutu var -           “return” –   yalın hali, en yakın kapalı fonksiyondan dönüşü adresler. -           “breake” – yalın hali, en yakın kapalı fonksiyonu sonlandırır. -           “continue” – yalın hali, en yakın kapalı fonksiyon(özellikle döngüler) için bir sonraki step’in çalışmasını sağlar. Tanımlarda Özellikle yalın halleri olarak belirttik zira label lar ile kullanımları mevcut böylece hangi kapalı fonksiyona etki edeceklerini adresleyebiliyorsunuz, Örneği incelemekte fayda olacaktır. Kotlinde etiket koymak mümkün, etiketle bir yeri formu işaretlemiş ve adresleyebilir oluyoruz. Etiket koymak için isim ve takiben "@" işareti koymamız yani "isim@" şeklinde kodlamamız gerekiyor. "breake" ve "continue": "breake" kullanımı ile ait olduğu döngüden bir sonraki step'e atlama sağlar. "continue" k...

Kotlin - 4 - Kontrol ve Döngüler

Resim
“if” Kontrolü: Kotlinde “if” ifadesi return değeri olan bir ifadedir o nedenle then gibi bir ifadeye gerek yoktur, if tek başına gerekli işi görür. Şimdi farz edelim, değeri 3 olan “a” ve 5 olan “b” değişkenlerimiz mevcut ve “max” isimli bir değişken olduğunu düşünelim, aşağıdaki her 3 yöntemde de “max” değişkenine büyük olan “b” değişkeninin değeri olan 5 ataması yapılmış olur. Eğer “if” ifadesini condition dışında atama amaçlıda kullanıyorsanız, “else” kısmının kullanılması zorunludur. “when” Kontrolü: Kotlin c benzeri dillerdeki “when” ifadesini aşağıdaki şekilde değitirir, “switch” benzeri bir kullanımı görülüyor. Aynı “if” ifadesi gibi kontrol amaçlı ya da atama amaçlı kullanılabilir,  bu şekilde kullanıldığında “else” ifadesi yine zorunlu olur. Ayrıca kontrol inputu verilmeyerek her condition kısmına bir boolean ifade yazıldığı takdirde if/else mantığı şeklinde de kullanılabilir. Bir başka Pratik kullanımda şu şekilde ifade edilebilir Dinamik bir ...

Kotlin - 3 - Paket tanımı ve Import

Resim
Paket tanımı seçime tabidir, ancak yapılmak istendiğinde en tepede yer alması gerekir. Aşağıdaki şekilde tanım yapılırsa fonksiyonun ve class’ın tam isimleri “my.demo.fonksiyon” ve “my.demo.sinif” olur. Eğer paket tanımlanmaz ise içerikler isimsiz olan default pakete bağlanır. Aşağıda Standart Kotlin importları bulunmaktadır, ancak JVM (java.lang.* , kotlin.jvm.*) veya JS (kotlin.js) için ekstra 1-2 Eklenti bulunmaktadır. İmport kelimesi sadece sınıf import etmek için kullanılmaz, Ayrıca Diğer tanımları import ederken de kullanabilirsiniz.       Üst seviye fonksiyon ve özellikler.            Obje tanımı içindeki fonksiyon ve özellikler.            Enum sabitler. Ayrıca “as” ifadesi ile benzer sınıfları ekleyerek isim karmaşasını kaldırmak ve erişimler için kısa isimlendirmeler yapmak mümkün. Java’nın aksine static için ayrı bir import ifadesi yoktur tüm importlar için aynı keyword ...