iT邦幫忙

2025 iThome 鐵人賽

DAY 16
0

今天我們來討論 Kotlin 最常一起討論比較的語言:Java。

Java 作為後端開發

Java 作為一個歷史悠久的語言,能夠應用的範圍也非常的廣,後端開發自然也是其中的一個應用範圍。

Kotlin 當初在設計時,作為一個同樣可以被編譯為 Java Bytecode 並在 JVM 上面運行的語言,Kotlin 選擇了在語法設計上,可以和過去 Java 撰寫的套件或框架能有良好的互動。兩個語言交互作用的程度,甚至可以在同一個專案裡面同時包含兩種語言,並進行編譯。

這也讓在討論後端開發的比較時,狀況會變得比較多元一點。

下面盡可能地針對我所知道的各種狀況進行討論

Spring Boot

討論 Java 的後端開發,一定會討論到目前使用率最高的框架 Spring Boot

只要單純的一點 Java Code,就可以快速的建立一個後端 API Server

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class DemoApplication {
    public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
    }
    @GetMapping("/hello")
    public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
      return String.format("Hello %s!", name);
    }
}

並且 Spring Boot 有自己的 ORM 結構和依賴注入,不用像 Ktor 一樣引入許多套件,可以說是一個非常完整的框架。

Spring Boot + Kotlin

隨著 Kotlin 的使用者越來越多,Spring Boot 也慢慢的接受使用 Kotlin 開發這個可能

甚至在官網上加入了使用 Kotlin 建置的選項。

Kotlin 選項

所以使用 Kotlin 開發 Spring Boot 專案,已經是一個可參考的選項。

程式碼大概是這個樣子

package com.example.blog

import org.springframework.stereotype.Controller
import org.springframework.ui.Model
import org.springframework.ui.set
import org.springframework.web.bind.annotation.GetMapping

@Controller
class HtmlController {

  @GetMapping("/")
  fun blog(model: Model): String {
    model["title"] = "Blog"
    return "blog"
  }

}

可以看出,雖然是不同的程式語言,但是結構還是很明顯是 spring boot 的樣子

Spring Boot 內混用 Java 與 Kotlin

雖然技術上可行,但是在一個專案內混用兩種語言,對許多開發者來說還是挺衝擊的。可以想到會有很多人員的磨合和程式交互的問題存在。

既然如此,為什麼還要參考這個選項呢?

因為,雖然使用 Java 在技術上能做到所有 Kotlin 能做到的事情,但是語法實在是太繁瑣了。

舉例來說,同樣是一個 JPA 的 Entity,用 Java 寫起來會是

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class User {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String username;
    private String email;

    // 預設建構子 (JPA 需要)
    public User() {}

    public User(String username, String email) {
        this.username = username;
        this.email = email;
    }

    // Getter 和 Setter
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

一樣的概念,用 Kotlin 寫起來則是

import jakarta.persistence.Entity
import jakarta.persistence.GeneratedValue
import jakarta.persistence.GenerationType
import jakarta.persistence.Id

@Entity
data class User(
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    val id: Long? = null,

    var username: String,
    var email: String
)

可以明顯看出,整個程式碼簡潔了不少。

這也是讓許多工程師在看到中大型且時常需要更改的專案時,會有將專案慢慢改成 Kotlin 的想法,起碼每天要閱讀的程式碼份量不會那麼高。

今天的部分就討論到這邊,我們明天見!


上一篇
Day 15:Ktor 和 Python 作為後端開發的特點比較
下一篇
Day 17:Spring boot 和 Ktor 的非同步存取 API 寫法
系列文
每天一點 Ktor 3.0:一個月學會 Kotlin 後端開發20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言