Kotlin etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Kotlin etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

IntelliJ'de yazılım yapan bir Java Developer için sıfırdan 20 dk'da kotlin öğretmeni istiyorum. IntelliJ'de kotlin ile maven ile proje oluşturma. Java ile yazılmış bağımlılıkları kullanma. Kotlini Spring Boot ile nasıl kullanımı.


Kotlin, modern bir programlama dili olup Java'nın bazı zayıf yönlerini aşmayı amaçlamaktadır. Kotlin, Java'dan daha kısa ve okunabilir bir kod yazmanıza olanak tanır. Kotlin'in bazı temel özelliklerine ve karşılık gelen Java kodlarına bir göz atalım:




1. Ana Fonksiyon:

Kotlin'de bir uygulamanın giriş noktası olan ana fonksiyon şöyledir:


kotlin

Copy code

fun main() {

    println("Merhaba, Kotlin!")

}

Java'da ise:


java

Copy code

public class Main {

    public static void main(String[] args) {

        System.out.println("Merhaba, Java!");

    }

}

IntelliJ'de Kotlin uygulaması oluşturmak için:


Yeni bir proje oluşturun.

Kotlin/JVM'i seçin.

Projeyi oluşturduktan sonra main.kt dosyasını oluşturun ve yukarıdaki Kotlin kodunu ekleyin.

2. Değişkenler:

Kotlin'de değişken tanımlama:


kotlin

Copy code

val sabitDegisken = "Ben değiştirilemem." //final in Java

var degisken = "Ben değiştirilebilirim."

degisken = "Gerçekten değiştirildim!"

Java'da:


java

Copy code

final String sabitDegisken = "Ben değiştirilemem.";

String degisken = "Ben değiştirilebilirim.";

degisken = "Gerçekten değiştirildim!";

3. Fonksiyonlar:

Kotlin'de fonksiyon tanımlama:


kotlin

Copy code

fun topla(a: Int, b: Int): Int {

    return a + b

}

Java'da:


java

Copy code

public int topla(int a, int b) {

    return a + b;

}

4. Sınıflar:

Kotlin'de basit bir sınıf tanımlama:


kotlin

Copy code

data class Kisiler(val isim: String, val yas: Int)

Java'da:


java

Copy code

public class Kisiler {

    private final String isim;

    private final int yas;


    public Kisiler(String isim, int yas) {

        this.isim = isim;

        this.yas = yas;

    }


    public String getIsim() {

        return isim;

    }


    public int getYas() {

        return yas;

    }

}

Yukarıdaki Kotlin kodunda data anahtar kelimesi, sınıf için toString(), equals(), ve hashCode() gibi temel metodları otomatik olarak üretir.



5. Kontrol Yapıları:

Kotlin'de if bir ifade olarak da kullanılabilir, yani bir değeri döndürebilir:


kotlin

Copy code

val max = if (a > b) a else b

Java'da:


java

Copy code

int max = (a > b) ? a : b;

Kotlin'de when yapısı, Java'daki switch yapısının yerini alır:


kotlin

Copy code

fun sayiTanima(x: Int): String {

    return when (x) {

        1 -> "Bir"

        2 -> "İki"

        3 -> "Üç"

        else -> "Tanınmayan sayı"

    }

}

Java'da:


java

Copy code

public String sayiTanima(int x) {

    switch (x) {

        case 1:

            return "Bir";

        case 2:

            return "İki";

        case 3:

            return "Üç";

        default:

            return "Tanınmayan sayı";

    }

}

6. Döngüler:

Kotlin'de for döngüsü:


kotlin

Copy code

for (i in 1..5) {

    println(i)

}

Java'da:


java

Copy code

for (int i = 1; i <= 5; i++) {

    System.out.println(i);

}

Kotlin'de bir listeyi dolaşmak:


kotlin

Copy code

val meyveler = listOf("elma", "muz", "kiraz")

for (meyve in meyveler) {

    println(meyve)

}

Java'da:


java

Copy code

List<String> meyveler = Arrays.asList("elma", "muz", "kiraz");

for (String meyve : meyveler) {

    System.out.println(meyve);

}

7. Null Güvenliği:

Kotlin, null olabilirlik konusunda çok daha güvenli. Bir değişkenin null olabileceğini belirtmek için ? kullanılır:


kotlin

Copy code

var ad: String? = null

ad?.length  // null kontrolü yapılarak length özelliğine erişilir

Java'da:


java

Copy code

String ad = null;

if (ad != null) {

    int length = ad.length();

}

Kotlin'de !! kullanımı, "Ben bu değişkenin null olmadığından eminim." anlamına gelir. Ancak bu, null olması durumunda NullPointerException hatasına neden olabilir:


kotlin

Copy code

var uzunluk: Int = ad!!.length

8. Lambda İfadeleri:

Kotlin'de listeler üzerinde yüksek düzeyli fonksiyonlar kullanımı:


kotlin

Copy code

val sayilar = listOf(1, 2, 3, 4, 5)

val ciftSayilar = sayilar.filter { it % 2 == 0 }.map { it * 2 }

Java'da:


java

Copy code

List<Integer> sayilar = Arrays.asList(1, 2, 3, 4, 5);

List<Integer> ciftSayilar = sayilar.stream()

    .filter(s -> s % 2 == 0)

    .map(s -> s * 2)

    .collect(Collectors.toList());

Kotlin'de lambda ifadeleri daha kısa ve okunabilir.


Bu temel konular, Kotlin'in sunduğu birçok özellikten sadece birkaçıdır. Kotlin'in daha ileri seviye özelliklerini keşfetmek için resmi dökümantasyonu ve diğer kaynakları kullanabilirsiniz.



9. Genişletme Fonksiyonları (Extension Functions):

Kotlin'de, bir sınıfa yeni metodlar eklemek için genişletme fonksiyonları kullanabilirsiniz. Bu, sınıfın kaynak koduna erişiminiz olmasa bile o sınıfı genişletmenizi sağlar.


Örnek olarak, String sınıfına yeni bir fonksiyon ekleyelim:


kotlin

Copy code

fun String.tekrarla(n: Int): String {

    return this.repeat(n)

}


val sonuc = "Merhaba".tekrarla(3)  // "MerhabaMerhabaMerhaba"

Java'da bu tarz bir şeyi yapabilmek için genellikle yardımcı (helper) sınıflar veya metodlar oluşturulur.


10. Nesne Bildirimi (Object Declarations):

Kotlin'de, tekil nesne oluşturmak için object anahtar kelimesi kullanılır. Bu, Java'daki singleton tasarım kalıbına karşılık gelir:


kotlin

Copy code

object Sinifim {

    var degisken: String = "Merhaba"


    fun fonksiyonum() {

        println("Fonksiyon çalıştı!")

    }

}


// Kullanımı

Sinifim.fonksiyonum()

11. Akıllı Dönüşümler (Smart Casts):

Kotlin, değişkenlerin tipini otomatik olarak takip edebilir. Bu özellik sayesinde, bir değişkenin türünü kontrol ettikten sonra, Kotlin bu bilgiyi hatırlar ve ekstra dönüşüm yapmaya gerek kalmaz:


kotlin

Copy code

fun uzunluguAl(deger: Any): Int? {

    if (deger is String) {

        // 'deger' bu blok içinde otomatik olarak String olarak kabul edilir

        return deger.length

    }

    return null

}

Java'da bu, manuel olarak döküm (casting) gerektirir.


12. İşlemci İfadeleri (Operator Overloading):

Kotlin, işlemci aşırı yüklemesini destekler. Bu, sınıflarınız için özel işlemciler tanımlamanıza olanak tanır:


kotlin

Copy code

data class Nokta(val x: Int, val y: Int) {

    operator fun plus(diger: Nokta): Nokta {

        return Nokta(x + diger.x, y + diger.y)

    }

}


val n1 = Nokta(1, 2)

val n2 = Nokta(3, 4)


val sonuc = n1 + n2  // Nokta(4, 6)

13. Boş Olmayan Değer Garantisi:

Kotlin'de, ?: işlemcisini kullanarak bir değişkenin null olup olmadığını kontrol edebilir ve null ise varsayılan bir değer atayabilirsiniz:


kotlin

Copy code

val liste = listOf("Kotlin", null, "Java")

for (item in liste) {

    val deger = item ?: "Boş"

    println(deger)

}

Bu, özellikle null değerleriyle çalışırken kodun daha temiz ve okunabilir olmasına yardımcı olur.


Kotlin öğrenirken daha pek çok özellikle karşılaşacaksınız. Kotlin, Java'ya göre daha az boilerplate kod içerir ve bu da kodunuzu daha kısa ve okunabilir kılar. Eğer daha fazla bilgi veya başka bir konu üzerinde konuşmak isterseniz, lütfen bana bildirin!


14. İşlevsel (Functional) Programlama:

Kotlin, işlevsel programlama özellikleriyle de tanınır. Örneğin, apply, let, run, with ve also gibi kapsam fonksiyonları bulunmaktadır.


kotlin

Copy code

val liste = mutableListOf(1, 2, 3).apply {

    add(4)

    removeAt(0)

}

let fonksiyonu, nesne üzerinde bir operasyon yapmanıza ve sonucu döndürmenize olanak tanır:


kotlin

Copy code

val stringDeger: String? = "Merhaba"

val uzunluk = stringDeger?.let { it.length } ?: 0

15. Delegasyon:

Kotlin, özelliklerin veya tüm sınıfın bir başka sınıfa delegasyon yapmasını sağlar:


kotlin

Copy code

interface Ses {

    fun sesCikar()

}


class Kedi : Ses {

    override fun sesCikar() = println("Miyav")

}


class SesDelegasyonu(ses: Ses) : Ses by ses


val kedi = Kedi()

val ses = SesDelegasyonu(kedi)

ses.sesCikar()  // Miyav

16. Sealed Sınıflar:

Kotlin'de, belirli sayıda alt sınıfa sahip olabilecek sınıflar oluşturabilirsiniz:


kotlin

Copy code

sealed class Hayvan

data class Kopek(val isim: String) : Hayvan()

data class Kus(val isim: String) : Hayvan()


fun sesCikar(hayvan: Hayvan) = when (hayvan) {

    is Kopek -> println("Hav hav")

    is Kus -> println("Cik cik")

}

Sealed sınıflar, tüm olası alt sınıfları sınırlı tutmak istediğinizde kullanışlıdır.


17. Inline, noinline ve crossinline:

Kotlin'de lambda ifadeleriyle çalışırken performans maliyetlerini azaltmak için inline fonksiyonlar kullanılır:


kotlin

Copy code

inline fun islem(yap: () -> Unit) {

    yap()

}

Ayrıca noinline ve crossinline gibi anahtar kelimeler de kullanılabilir:


noinline: Inline fonksiyonlarda, belirli lambda ifadelerinin inline edilmemesini isterseniz kullanılır.

crossinline: Inline edilen bir lambda'nın, içerisinde bulunduğu dış fonksiyondan dönmeyeceğini garantilemek için kullanılır.

18. Type Aliases:

Tip takma adları, varolan türlere başka bir ad vermek için kullanılır:


kotlin

Copy code

typealias Metin = String

val mesaj: Metin = "Merhaba Kotlin"

Bu, özellikle fonksiyon türleri gibi karmaşık türleri yeniden adlandırmak için kullanışlıdır.


Bu konular, Kotlin'in sunabileceği derinlikteki birçok özellikten sadece bazılarıdır. Kotlin öğrenirken, bu özelliklerin her biriyle detaylı bir şekilde uğraşmak, onları gerçek dünya uygulamalarında nasıl kullanabileceğinizi görmek için yararlı olacaktır.



IntelliJ'de kotlin ile maven ile proje oluşturabilir miyim?


Evet, IntelliJ IDEA'da Kotlin ile Maven tabanlı bir proje oluşturabilirsiniz. İşte adım adım nasıl yapılacağı:


Proje Oluşturma:


IntelliJ IDEA'yı açın.

"New Project" seçeneğini tıklayın.

Sol menüden "Maven"i seçin.

"Create from archetype" kutusunu işaretleyin ve "org.jetbrains.kotlin:kotlin-archetype-jvm" öğesini seçin. Bu, Kotlin için temel bir Maven projesi oluşturacaktır.

"Next"e tıklayın.

Proje Detaylarını Girme:


Projeniz için GroupId, ArtifactId ve diğer Maven detaylarını girin.

"Next"e tıklayın.

Proje Lokasyonunu Seçme:


Projenizin nerede oluşturulacağını belirtin.

"Finish"e tıklayın.

POM.xml Dosyasını Güncelleme:


Oluşturulan proje içindeki pom.xml dosyasını açın.

Kotlin için gerekli bağımlılıkları ekleyin veya güncelleyin. Örneğin:

xml

Copy code

<dependencies>

    <dependency>

        <groupId>org.jetbrains.kotlin</groupId>

        <artifactId>kotlin-stdlib-jdk8</artifactId>

        <version>${kotlin.version}</version>

    </dependency>

</dependencies>


<build>

    <plugins>

        <plugin>

            <groupId>org.jetbrains.kotlin</groupId>

            <artifactId>kotlin-maven-plugin</artifactId>

            <version>${kotlin.version}</version>

            <executions>

                <execution>

                    <goals>

                        <goal>compile</goal>

                        <goal>test-compile</goal>

                    </goals>

                </execution>

            </executions>

        </plugin>

    </plugins>

</build>

${kotlin.version} yerine kullanmak istediğiniz Kotlin versiyonunu yazabilirsiniz. Örneğin: 1.5.10.

Projenizi Derleyin ve Çalıştırın:


Maven projesini derlemek için terminali açın ve mvn clean install komutunu girin.

Ana sınıfınızı çalıştırarak Kotlin kodunuzun düzgün bir şekilde çalıştığından emin olun.

Bu adımlar, IntelliJ IDEA'da Maven tabanlı bir Kotlin projesi oluşturmanıza yardımcı olmalıdır. Her zaman en yeni Kotlin sürümünü kullanmak için bağımlılıklarınızı ve eklentilerinizi düzenli olarak güncellemeyi unutmayın.


Java ile yazılmış bağımlılıkları kullanabilir miyim?


Evet, Kotlin Java ile tam uyumlu olduğundan, Java ile yazılmış bağımlılıkları (kütüphaneleri) Kotlin projelerinde kullanabilirsiniz. Kotlin, JVM (Java Sanal Makinesi) üzerinde çalıştığı için Java kütüphaneleri ile doğal bir şekilde entegre olabilir. Aynı JVM üzerinde çalışan iki dil arasında bu tür bir etkileşim, genellikle sorunsuz bir şekilde gerçekleşir.


Java kütüphanesini Kotlin projesine nasıl ekleyeceğiniz, kullandığınız yapılandırma yönetim aracına (örneğin, Maven, Gradle) bağlıdır.


Maven ya da Gradle ile Java Bağımlılığını Eklemek:


Java ile yazılmış bir kütüphaneyi Maven veya Gradle projesine eklemek isterseniz, yaptığınız işlem Java projesine bir bağımlılık eklemekle aynıdır.


Örneğin, Maven için pom.xml dosyanızda şöyle bir bağımlılık ekleyebilirsiniz:


xml

Copy code

<dependency>

    <groupId>com.example</groupId>

    <artifactId>example-library</artifactId>

    <version>1.0.0</version>

</dependency>

Gradle için ise build.gradle.kts ya da build.gradle dosyanızda şöyle bir bağımlılık ekleyebilirsiniz:


kotlin

Copy code

implementation("com.example:example-library:1.0.0")

Java kütüphanesini projenize ekledikten sonra, Kotlin kodunuzda bu kütüphanenin sınıflarını, fonksiyonlarını ve diğer özelliklerini doğrudan kullanabilirsiniz.


Not: Kotlin, Java kütüphanesini kullanırken bile bazı avantajlara sahip olabilir. Örneğin, Java kütüphanesindeki sınıfların uzantı fonksiyonlarını tanımlayabilir ve bu sınıflar üzerinde daha "kotlinesque" (Kotlin tarzında) operasyonlar gerçekleştirebilirsiniz. Bu, Java ve Kotlin arasında uyumlu bir şekilde çalışma yeteneğini daha da güçlendirir.


Eklediğim Java bağımlılığını kotlin içinde nasıl kullanırım? 


Java bağımlılıklarını Kotlin projenizde kullanmak oldukça basittir. Java sınıflarını, Kotlin'de kendi sınıflarınızı kullanır gibi kullanabilirsiniz.


Bir örnekle bu durumu açıklayalım:


Adım 1: Java ile yazılmış bir bağımlılık ekleyelim. Örnek olarak, popüler bir Java kütüphanesi olan Apache Commons Lang'i ele alalım.


Maven için pom.xml dosyanızda bu bağımlılığı ekleyebilirsiniz:


xml

Copy code

<dependency>

    <groupId>org.apache.commons</groupId>

    <artifactId>commons-lang3</artifactId>

    <version>3.12.0</version>

</dependency>

Gradle için build.gradle.kts ya da build.gradle dosyanızda şöyle bir bağımlılık ekleyebilirsiniz:


kotlin

Copy code

implementation("org.apache.commons:commons-lang3:3.12.0")

Adım 2: Şimdi bu bağımlılığı Kotlin kodunuzda kullanalım. Apache Commons Lang kütüphanesinin StringUtils sınıfını ele alalım:


kotlin

Copy code

import org.apache.commons.lang3.StringUtils


fun main() {

    val original = "Kotlin"

    val reversed = StringUtils.reverse(original)


    println("Original String: $original")

    println("Reversed String: $reversed")

}

Bu örnekte, Kotlin kodu içinde Java ile yazılmış StringUtils sınıfını doğrudan kullandık. reverse fonksiyonu, bir string'i tersine çevirir. Bu, Kotlin'deki herhangi bir yerel sınıf ya da fonksiyonu kullanma deneyimine oldukça benzer.


Önemli Not: Java'nın null olabilirliği ile ilgili sınırlamaları olduğundan, Java kütüphanesinden gelen nesnelerle çalışırken null kontrolü yapmak önemlidir. Kotlin'in null güvenliği özellikleri sayesinde bu tür potansiyel null değerlerini rahatça kontrol edebilirsiniz.


1. Jackson (JSON işleme kütüphanesi):

Jackson, Java'da JSON işleme için yaygın olarak kullanılan bir kütüphanedir.


Bağımlılık:


Maven için:


xml

Copy code

<dependency>

    <groupId>com.fasterxml.jackson.core</groupId>

    <artifactId>jackson-databind</artifactId>

    <version>2.12.0</version>

</dependency>

Gradle için:


kotlin

Copy code

implementation("com.fasterxml.jackson.core:jackson-databind:2.12.0")

Kotlin'de Kullanım:


kotlin

Copy code

import com.fasterxml.jackson.databind.ObjectMapper


data class Ogrenci(val isim: String, val yas: Int)


fun main() {

    val ogrenci = Ogrenci("Ahmet", 20)

    val objectMapper = ObjectMapper()


    // Ogrenci objesini JSON string'e dönüştürme

    val jsonString = objectMapper.writeValueAsString(ogrenci)

    println(jsonString)


    // JSON string'ini Ogrenci objesine dönüştürme

    val ogrenciFromJson: Ogrenci = objectMapper.readValue(jsonString, Ogrenci::class.java)

    println(ogrenciFromJson)

}

2. Joda-Time (Tarih ve zaman işlemleri için kütüphane):

Bağımlılık:


Maven için:


xml

Copy code

<dependency>

    <groupId>joda-time</groupId>

    <artifactId>joda-time</artifactId>

    <version>2.10.10</version>

</dependency>

Gradle için:


kotlin

Copy code

implementation("joda-time:joda-time:2.10.10")

Kotlin'de Kullanım:


kotlin

Copy code

import org.joda.time.DateTime

import org.joda.time.format.DateTimeFormat


fun main() {

    val simdikiZaman = DateTime()

    println("Şu anki tarih ve saat: $simdikiZaman")


    val belirliBirTarih = DateTime(2023, 8, 25, 12, 0)

    println("Belirli bir tarih ve saat: $belirliBirTarih")


    val format = DateTimeFormat.forPattern("dd.MM.yyyy HH:mm")

    val tarihString = belirliBirTarih.toString(format)

    println("Formatlanmış tarih: $tarihString")

}

Bu örnekler, Kotlin'in Java kütüphaneleriyle ne kadar uyumlu olduğunu gösterir. Kotlin'de Java kütüphanesini kullanırken, genellikle Java'da bu kütüphaneyi kullanma deneyimine oldukça benzer bir deneyim yaşarsınız. Ancak Kotlin'in sunduğu ek avantajlar (uzantı fonksiyonları, null güvenliği vb.) ile işlerinizi daha da kolaylaştırabilirsiniz.


Kotlini Spring Boot ile nasıl kullanırım?


Kotlin ve Spring Boot mükemmel bir uyum içindedir. Spring Boot, Kotlin'i birinci sınıf bir dil olarak destekler, bu nedenle Kotlin ile Spring Boot uygulamaları oluşturmak oldukça kolaydır.


Spring Boot projesini Kotlin ile oluşturmanın adım adım yönergeleri:


1. Proje Oluşturma:

Projenizi oluşturmak için Spring Initializr web sitesini kullanabilirsiniz. Burada dil seçeneği olarak "Kotlin"i seçin. Gerekli bağımlılıkları ekleyin (örn. Spring Web, Spring Data JPA vb.) ve proje dosyanızı indirin.


2. Bağımlılıklar:

Projenizi oluşturduktan sonra build.gradle.kts veya pom.xml dosyanızda Spring Boot ve Kotlin arasındaki entegrasyonu sağlamak için bazı bağımlılıklar ve eklentilere ihtiyaç duyacaksınız.


Eğer Gradle kullanıyorsanız, Kotlin eklentisini ve Kotlin için Spring eklentisini eklemeniz gerekecektir:


kotlin

Copy code

plugins {

    kotlin("jvm") version "1.5.0"

    kotlin("plugin.spring") version "1.5.0"

}

Maven kullanıyorsanız, Kotlin ve Spring için eklentileri pom.xml'inize ekleyin.


3. Kotlin Kodu:

Kotlin dilinde Spring Boot uygulaması oluşturmak için aşağıdaki gibi bir başlangıç sınıfı tanımlayabilirsiniz:


kotlin

Copy code

import org.springframework.boot.autoconfigure.SpringBootApplication

import org.springframework.boot.runApplication


@SpringBootApplication

class MyApp


fun main(args: Array<String>) {

    runApplication<MyApp>(*args)

}

4. Veritabanı Entegrasyonu:

Eğer Spring Data JPA kullanarak bir veritabanıyla entegrasyon yapmayı planlıyorsanız, Kotlin'in veri sınıfları (data class) bu iş için mükemmeldir:


kotlin

Copy code

import javax.persistence.Entity

import javax.persistence.GeneratedValue

import javax.persistence.Id


@Entity

data class User(

    @Id @GeneratedValue val id: Long? = null,

    val name: String,

    val age: Int

)

5. Kontrolcüler ve Servisler:

Kontrolcüler ve servisler de benzer şekilde tanımlanabilir:


kotlin

Copy code

import org.springframework.web.bind.annotation.GetMapping

import org.springframework.web.bind.annotation.RequestMapping

import org.springframework.web.bind.annotation.RestController


@RestController

@RequestMapping("/api/users")

class UserController(private val userService: UserService) {


    @GetMapping

    fun getAllUsers() = userService.getAllUsers()

}

Kotlin'in Spring Boot ile kullanımı Java ile benzerdir, fakat Kotlin'in sunduğu dil özellikleri sayesinde genellikle daha az ve daha okunabilir kod yazarsınız.


6. Uygulamayı Çalıştırma:

Projenizi IntelliJ IDEA'da açın ve ana sınıfınızı çalıştırarak Spring Boot uygulamanızı başlatın.


Bu adımlar, Kotlin'de Spring Boot uygulaması oluşturmanın temel yönlerini kapsamaktadır. Spring Boot'un çok sayıda özelliği ve modülü olduğundan, kullanmak istediğiniz özelliklere bağlı olarak ek konfigürasyonlar veya bağımlılıklar eklemeniz gerekebilir.

Rastgele İçerik

DonanımHaber

© tüm hakları saklıdır
made with by templateszoo