5 สิ่งแตกต่าง ที่ Kotlin ดีกว่า Java (ของดีครับน้อนๆ)

Android Nov 4, 2022

แน่นอนว่าเราเป็น Android Kotlin Developer มานานพอสมควรแล้ว และพบว่าการเขียน Kotlin นั้นทำให้ชีวิตนักพัฒนาดีขึ้นมาก ทำงานได้อย่างมีความสุขมากขึ้น

และเนื่องด้วยทางทีม Android ยกภาษา Kotlin ให้เป็นภาษาโปรแกรมมิ่ง Official อีกภาษานึงในการพัฒนา Android Application และอัพเดต feature ใหม่ ๆ ทุกลมหายใจ ให้กับภาษา Kotlin ก่อนเสมอ คนให้คนใหม่ ๆ อยากใช้ Kotlin ไปอีก

แต่เนื่องด้วยความจำเป็นของนักพัฒนาบางท่าน ที่อาจจะยังไม่ได้ใช้ภาษา Kotlin ในการทำงาน ทางเราเลยหยิบ 5 สิ่งที่ภาษา Kotlin แตกต่างในทางที่ดีกว่า Java มาฝากนักพัฒนาทุกคนกันค่า มาเริ่มกันเลย

1) When: switch-case ในโลก Kotlin

ในการเขียนโปรแกรมเบื้องต้น เราจะได้เรียนการใช้ condition แบบต่าง ๆ ไม่ว่าจะเป็น if-else, switch-case

ซึ่งในภาษา Java จะไม่มี condition แบบ switch เราจึงใช้ if-else ซ้อนกันเยอะ ๆ แต่ในภาษา Kotlin มีสิ่งที่คล้าย switch case ก็คือ when นั่นเอง

ตัวอย่างง่าย ๆ เช่นโปรแกรมตัดเกรด สุดยอดนิยมที่หลาย ๆ คนต้องเจอตอนเขียนโปรแกรมใหม่ ๆ เนอะ เรามี condition การให้เกรดประมาณนี้

  • A: >=80
  • B: >=70
  • C: >=60
  • D: >=50
  • ที่เหลือ F

ถ้าในภาษา Java เราต้องเเราต้องเขียน if-else ซ้อนกันหลาย ๆ ชั้น แบบนี้

public class Main { 
  public static void main(String[] args) { 
    int score = 85;
    String grade;
    if (score >= 80) {
        grade = "A";
    } else if (score >= 70) {
        grade = "B";
    } else if (score >= 60) {
        grade = "C";
    } else if (score >= 50) {
        grade = "D";
    } else {
        grade = "F";
    }
    System.out.println(grade);
  } 
}

ส่วนภาษา Kotlin เราสามารถใช้ when ได้เลย มันจะคล้ายกับ switch-caseทำให้โค้ดของเรามีขนาดสั้นลง อ่านเข้าใจง่ายขึ้นอีกด้วยนะ

fun main() {
    val score = 85
    val grade = when {
        score >= 80 -> "A"
        score >= 70 -> "B"
        score >= 60 -> "C"
        score >= 50 -> "D"
        else -> "F"
    }
    println(grade)
}

2) ไม่ต้องนับบวกให้เมื่อยมือ ใช้ string templates สิจ๊ะ

ก่อนหน้านี้เวลาเราเชื่อม string ต่าง ๆ เราจะต้องใช้เครื่องหมาย + เพื่อเอาตัวแปรที่เราต้องการ มาเป็น string ที่เราต้องการ บางครั้งก็ยาวเอามาก ๆ เลย

public class Main
{
    public static void main(String[] args) {
		String name = "MikkiPastel";
        int follower = 13000;
        String result = "Hello " + name + ", you have " + follower + " followers";
        System.out.println(result);
	}
}

แต่ใน kotlin มี string templates สามารถใช้ ${variableName} ใส่เข้าไปในค่า string ได้เลย ไม่ต้องบวกกันให้เสียเวลา

fun main() {
    val name = "MikkiPastel"
    val follower = 13000
    println("Hello ${name}, you have ${follower} followers")
}

ปล. ในนี้ไม่ได้กล่าวถึงการใช้ String Resource สำหรับ Android นะ แหะ ๆ

3) ArrayList และการวนลูปแบบมี index มาให้

ก่อนอื่นในภาษา Java เวลาเราเพิ่มของใน ArrayList เราสร้าง ArrayList เปล่า ๆ ขึ้นมาอันนึง แล้วก็ค่อย ๆ เพิ่มของทีละอัน

การวนลูป เราก็สร้าง for loop แบบท่าปกติเลย โดยเราจะอ้างอิงจำนวนครั้งในการวนลูปถึง ขนาดของ arrayList ตัวนั้น

ถ้าเราต้องการให้คืนค่า index กลับไปด้วย จะต้องคืนค่า i ออกมาด้วย

import java.util.ArrayList;

public class Main { 
  public static void main(String[] args) { 
    ArrayList<String> foodList = new ArrayList<String>();
    foodList.add("Cupcake");
    foodList.add("Nom-yen");
    foodList.add("Lemon Ice Tea");
    foodList.add("Matcha Latte");
    foodList.add("Taro Milkshake");
    foodList.add("Blue Hawaii");
    foodList.add("Cheesecake");
    foodList.add("Thai Milk Tea");
    
    for (int i = 0; i < foodList.size(); i++) {
        System.out.println(foodList.get(i) + " " + i);		
    }
  } 
}

แต่ภาษา Kotlin เราสามารถยัดทุกก้อน เข้าไปในการสร้าง arrayLst ได้เลย และมี forEach ที่สามารถเรียกต่อจาก array ที่เราต้องการ มาใช้งาน for-loop ได้เลย

fun main() {
    val foodList = arrayListOf(
        "Cupcake", "Nom-yen", "Lemon Ice Tea",
        "Matcha Latte", "Taro Milkshake", "Blue Hawaii",
        "Cheesecake", "Thai Milk Tea"
    )
    foodList.forEach { food -> 
        println(food)
    }
}

แต่ที่พิเศษกว่านั้น คือมี forEachIndexed ที่นอกจากจะ return ค่า ใน array นั้น ๆ แล้ว ยังคืนค่า index ด้วยนะ เรียกว่าเป็นคำสั่ง for-loop ขวัญใจชาวเดฟเลยทีเดียว ตัวอย่างโค้ดก็คือ หาเมนูที่มีคำว่า cake ให้หน่อย

fun main() {
    val foodList = arrayListOf(
        "Cupcake", "Nom-yen", "Lemon Ice Tea",
        "Matcha Latte", "Taro Milkshake", "Blue Hawaii",
        "Cheesecake", "Thai Milk Tea"
    )
    foodList.forEachIndexed { index, food ->
        println("${food} ${index}")
    }
}

สามารถอ่าน document ของ forEach และ forEachIndexed ได้ที่นี่เลย

forEach - Kotlin Programming Language
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/for-each.html
forEachIndexed - Kotlin Programming Language
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/for-each-indexed.html

ปล. การอ้างอิงค่าใน array ของภาษา Kotlin จะใช้เป็น foodList[index] นะ

4) ใช้ filter เพื่อหาของใน arrayList แบบง่าย ๆ

จากตัวอย่างข้อที่แล้ว ถ้าเราต้องการค้นหาเมนู ที่มีคำว่า cake ออกมาเป็น list ก้อนใหม่เลย ในภาษา Java เราอาจจะวน for loop แบบเมื่อกี้ เพื่อสร้าง list นี้ออกมา

import java.util.ArrayList;

public class Main { 
  public static void main(String[] args) { 
    ArrayList<String> foodList = new ArrayList<String>();
    foodList.add("Cupcake");
    foodList.add("Nom-yen");
    foodList.add("Lemon Ice Tea");
    foodList.add("Matcha Latte");
    foodList.add("Taro Milkshake");
    foodList.add("Blue Hawaii");
    foodList.add("Cheesecake");
    foodList.add("Thai Milk Tea");
    
    ArrayList<String> result = new ArrayList<String>();
    
    for (int i = 0; i < foodList.size(); i++) {
        if (foodList.get(i).contains("cake")) {
            result.add(foodList.get(i));
        }		
    }
    System.out.println(result);
  } 
}

แต่ในภาษา Kotlin เราไม่ต้องทำอะไรแบบนั้น แค่ใช้ filter เท่านั้นเอง ง่าย ๆ

fun main() {
    val foodList = arrayListOf(
        "Cupcake", "Nom-yen", "Lemon Ice Tea",
        "Matcha Latte", "Taro Milkshake", "Blue Hawaii",
        "Cheesecake", "Thai Milk Tea"
    )
    val result = foodList.filter { it.contains("cake") }
    println(result)
}

สามารถอ่าน document ของ filter ได้ที่นี่เลย

filter - Kotlin Programming Language
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/filter.html

5) random เลขเป็น list ได้ด้วยหรอพี่

เป็นท่าที่เจอโดยบังเอิญ ว่าสมมติเรา random 20 เลข จาก 1000 เลข โดยไม่ซํ้ากัน ต้องทำยังไงนะ

อาจจะต้อง random เลขเก็บไว้ใน list แต่ก่อนเก็บลง list ก็ต้อง check ก่อนว่ามันไม่ซํ้าไหมนะ ถ้าซํ้าก็ทำใหม่

ในภาษา Kotlin สามารถใช้ Random.nextInt() และให้มันคืนค่าเลขที่ไม่ซํ้าออกมาเป็น list ออกมาให้เรา แต่เลขข้างในต้องไปเรียงเอาเองนะ

import kotlin.random.Random

fun main() {
    val randomValues = List(20) { Random.nextInt(0, 1000) }
    println(randomValues)
}

สามารถอ่าน document ของ random ได้ที่นี่เลย

Random - Kotlin Programming Language
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.random/-random/

จริง ๆ แล้ว ของดีของ Kotlin ยังไม่หมดแค่นี้ เพราะยังมีอีกมากมาย

ถ้าใครอยากลองสัมผัส เชิญชวนได้ที่คอร์ส Getting Started with Kotlin นี้เลย เนื้อหา official จากทีม Android สอนโดยคุณเอก Android GDE เชียวนะ

แต่ทางเราได้ข่าวมาว่า มีคนอยากได้เสื้อ Kotlin สวย ๆ นี้ไปใส่ใช่ไหมหล่า แต่ไม่ทันรอบที่แล้ว

บอกเลยว่าคอร์สนี้เรียนฟรี เรียนจบครบตามเกณฑ์แล้วได้ของฟรีด้วยน้า

ตัวกิจกรรมจะมีถึงวันที่ 16 ธันวาคม 2565 ของแจกแบบ first come first serve ช้าหมดอดน้า

📝 กติกาการรับของรางวัล

  1. เรียนคอร์ส Getting Started with Kotlin จบ 100%
    https://to.skooldio.com/kotlin-online-course-free
  2. ทำแบบทดสอบวัดความรู้เรื่อง Kotlin ได้คะแนน 225 คะแนนขึ้นไป
    https://to.skooldio.com/kotlin-skill-score
  3. ลงทะเบียนรับเพื่อรับของรางวัลจากทาง Google ได้ ที่นี่เลย
    https://forms.gle/59WReyXy1JnXXexe8

คนที่มาจากเพจเราหรือเจอบล็อกเรา อย่าลืมวงเล็บ MikkiPastel ไว้หลังชื่อแบบนี้ด้วยนะ เพราะรอบนี้จะมีสติ๊กเกอร์จากเพจของเราด้วยน้า

อย่าลืมวงเล็บ MikkiPastel ไว้หลังชื่อแบบนี้ด้วยนะ เพราะรอบนี้จะมีสติ๊กเกอร์จากเพจของเราด้วยน้า ตัวอย่างจ้า https://forms.gle/59WReyXy1JnXXexe8

สามารถ support ค่ากาแฟเจ้าของบล็อกได้ที่ปุ่มแดงส้มสุดน่ารักที่มุมซ้ายล่าง หรือกดปุ่มตรงนี้ก็ได้จ้า

Buy Me a Coffee at ko-fi.com

ช่องทาง Twitter ติดตามข่าวสารแบบไวๆ

ติดตามข่าวสารและบทความใหม่ๆได้ที่

อย่าลืมกด like กด share บทความกันด้วยนะคะ :)

Posted by MikkiPastel on Sunday, 10 December 2017

ช่องทางใหม่ ติดตามทุกๆสตรีมของเราได้ที่

Twitch
Twitch is the world’s leading video platform and community for gamers.
https://www.twitch.tv/mikkipastel

Subscribe ช่อง YouTube ของเราได้ที่

mikkicoding
Android Developer & Content Creator
https://www.youtube.com/c/mikkicoding

download แอพอ่านบล็อกใหม่ของเราได้ที่นี่

MikkiPastel - Apps on Google Play
First application from “MikkiPastel” on play store beta feature- read blog from https://www.mikkipastel.com by this application- read blog content by chrome custom tab- update or refresh new content by pull to refresh- share content to social network
https://play.google.com/store/apps/details?id=com.mikkipastel.blog

Tags

Minseo Chayabanjonglerd

I am a full-time Android Developer and part-time contributor with developer community and web3 world, who believe people have hard skills and soft skills to up-skill to da moon.