ตอนที่ 2 ตัวแปรและประเภทของตัวแปรใน Kotlin

หนึ่งในสมบัติที่สำคัญของ Kotlin คือตัวแปร ซึ่งช่วยให้การทำแอพสามารถจัดเก็บและจัดการข้อมูลระหว่างรันไทม์ได้ ในบทความนี้ เราจะมาดูรายละเอียดเกี่ยวกับตัวแปร Kotlin และวิธีการใช้ในการรับทำแอพ Kotlin

ตัวแปร Kotlin คืออะไร?

ในการทำแอพพลิเคชั่น ตัวแปรคือตำแหน่งหน่วยความจำที่มีชื่อซึ่งใช้เพื่อเก็บข้อมูลชั่วคราว ข้อมูลที่จัดเก็บไว้ในตัวแปรสามารถเป็นประเภทต่างๆ ได้ เช่น ตัวเลข สตริง บูลีน และอื่นๆ ใน Kotlin ตัวแปรจะใช้เพื่อเก็บและจัดการข้อมูลในโปรแกรม

ตัวแปร Kotlin แบ่งออกเป็นสองประเภท:

1. ตัวแปรที่เปลี่ยนไม่ได้ (Immutable Variables): เป็นตัวแปรที่ไม่สามารถเปลี่ยนค่าได้เมื่อเริ่มต้น ใน Kotlin ตัวแปรที่ไม่เปลี่ยนรูปจะถูกประกาศโดยใช้คีย์เวิร์ด “val” ตัวอย่างเช่น:

val name: String = "John"

ในตัวอย่างด้านบน ตัวแปร “name” เป็นตัวแปรประเภท String ที่เก็บค่า “John” ไว้ เมื่อกำหนดค่าให้กับตัวแปรแล้วจะไม่สามารถเปลี่ยนแปลงได้ในภายหลังในการทำแอพได้

2. ตัวแปรที่เปลี่ยนแปลงได้ (Mutable Variables): เป็นตัวแปรที่สามารถเปลี่ยนแปลงค่าระหว่างรันไทม์ได้ ใน Kotlin ตัวแปรที่เปลี่ยนแปลงได้จะถูกประกาศโดยใช้คีย์เวิร์ด “var” ตัวอย่างเช่น:

var age: Int = 25

ในตัวอย่างด้านบน ตัวแปร “age” เป็นตัวแปรที่เปลี่ยนแปลงได้ประเภท Int ที่เก็บค่า 25 ค่าของตัวแปรนี้สามารถเปลี่ยนแปลงได้ภายหลังในการทำแอพโดยใช้โอเปอเรเตอร์การกำหนด “=”

ประเภทของตัวแปรใน Kotlin

Kotlin มีระบบประเภทที่สมบูรณ์และกว้างขวาง ซึ่งรวมถึงประเภทตัวแปรต่างๆ ประเภทของตัวแปรใน Kotlin สามารถแบ่งออกได้เป็น 2 ประเภทกว้างๆ ได้แก่ ประเภทที่เป็น null ได้ (nullable) และเป็น null ไม่ได้ (non-nullable)

  • ประเภทที่เป็น null ไม่ได้ (non-nullable) มีดังนี้:
    • Boolean: ตัวแปร Boolean เก็บค่าบูลีน (ture หรือ false) 
    • Byte: ตัวแปร Byte เก็บค่าจำนวนเต็มระหว่าง -128 ถึง 127 
    • Short: ตัวแปร Short เก็บค่าจำนวนเต็มระหว่าง -32,768 ถึง 32,767 
    • Int: ตัวแปร Int เก็บค่าจำนวนเต็มระหว่าง -2^31 และ 2^31-1 
    • Long: ตัวแปรแบบ Long เก็บค่าจำนวนเต็มระหว่าง -2^63 และ 2^63-1 
    • Float: ตัวแปร Float เก็บค่าทศนิยม 
    • Double: ตัวแปร Double เก็บค่าทศนิยมที่มีความแม่นยำสองเท่า 
    • Char: ตัวแปร Char เก็บค่าอักขระเดียว 
  • ประเภท Nullable คล้ายกับประเภทที่ไม่ใช่ Nullable แต่ยังสามารถเก็บค่า Null ได้ ประเภท Nullable จะแสดงด้วย “?” ในตอนท้ายของการประกาศประเภท ตัวอย่างเช่น “String?” เป็นประเภทสตริงที่เป็น Nullable
  • นอกจากประเภทพื้นฐานเหล่านี้แล้ว Kotlin ยังมีประเภทอื่นๆ อีกหลายประเภท เช่น:
    • Arrays: อาร์เรย์ใช้เพื่อเก็บชุดของค่าประเภทเดียวกัน
    • Ranges: ช่วงแสดงถึงลำดับของค่า
    • Strings: สตริงแสดงถึงลำดับของอักขระ
    • Collections: คอลเลกชันใช้เพื่อจัดเก็บกลุ่มของวัตถุ (Object) ที่เกี่ยวข้อง

โดยรวมแล้ว Kotlin มีระบบประเภทที่แข็งแกร่งซึ่งรองรับตัวแปรประเภทต่างๆ และทำให้การทำแอพสามารถเขียนโค้ดที่มีประสิทธิภาพและรัดกุมได้

ตัวอย่างการประกาศตัวแปรแต่ละชนิด

1. เป็น null ไม่ได้ (non-nullable)

// Boolean 
val isStudent: Boolean = true 

// Byte 
val byteValue: Byte = 120
 
// Short 
val shortValue: Short = 10000
 
// Int 
val intValue: Int = 100000 

// Long 
val longValue: Long = 1000000000L 

// Float 
val floatValue: Float = 3.14F 

// Double 
val doubleValue: Double = 3.14159265359 

// Char 
val firstLetter: Char = 'H'

2. เป็น null ได้ (nullable)

// Nullable String
var nullableString: String? = null

3. ตัวแปรแบบอื่น ๆ

// Array
val numbers = arrayOf(1, 2, 3, 4, 5)

// Range
val range = 1..10

// String
val message = "Hello, Kotlin!"

// Collection
val list = listOf("apple", "banana", "cherry")

ระบบความปลอดภัยที่เป็น Null ของ Kotlin (Null Safty)

ใน Kotlin ความปลอดภัยแบบ null เป็นสมบัติสำคัญที่ออกแบบมาเพื่อช่วยหลีกเลี่ยง NullPointerExceptions (NPE) ระบบความปลอดภัยแบบ null ของ Kotlin ได้รับการออกแบบมาให้มีความปลอดภัยและแสดงออกอย่างชัดเจน ช่วยให้การเขียนโค้ดในการทำแอพมีความชัดเจน กระชับ และอ่านง่ายมาขึ้นในการทำแอพ

ระบบความปลอดภัยที่เป็น null ของ Kotlin นั้นยึดตามหลักการดังต่อไปนี้:
  1. ตัวแปรที่ไม่ใช่ค่า Null ทุกตัวจะต้องมีการกำหนดค่าเมื่อมีการประกาศ
  2. ตัวแปร nullable ทุกตัวจะต้องถูกทำเครื่องหมายอย่างชัดเจนว่าเป็น nullable ด้วยเครื่องหมาย ? ด้านท้าย
  3. ค่า Null สามารถเข้าถึงได้โดยใช้ตัวดำเนินการที่ปลอดภัยสำหรับค่า Null เท่านั้น
ลองมาดูหลักการแต่ละข้อให้ละเอียดยิ่งขึ้น

1. การเริ่มต้นตัวแปร non-nullable: ใน Kotlin ไม่สามารถประกาศตัวแปรที่เป็น non-nullable ได้โดยไม่เริ่มต้น หากพยายามทำเช่นนั้น คอมไพเลอร์จะส่งข้อผิดพลาด วิธีนี้ช่วยให้แน่ใจว่าจะไม่ใช้ตัวแปรที่ไม่ได้เริ่มต้นโดยไม่ตั้งใจ ซึ่งอาจนำไปสู่ข้อผิดพลาดรันไทม์สำหรับการรับทำแอพได้

// This will cause a compilation error
var x: Int // Error: variable 'x' must be initialized

2. การทำเครื่องหมายตัวแปร Nullable: ในการประกาศตัวแปรที่สามารถเก็บค่า Null ได้ ต้องใช้เครื่องหมาย ? ร่วมด้วย สิ่งนี้จะบอกคอมไพเลอร์ว่าตัวแปรสามารถเป็นค่า null ได้ และจะต้องจัดการค่า null โดยใช้ตัวดำเนินการที่ปลอดภัยสำหรับค่า null

var x: Int? = null // nullable Int variable initialized to null

3. การใช้ตัวดำเนินการแบบ Null-Safe: Kotlin มีตัวดำเนินการแบบ null-safe หลายตัวที่อนุญาตให้เข้าถึงตัวแปรที่เป็น null โดยไม่ต้องเสี่ยงกับ NullPointerException ตัวดำเนินการเหล่านี้รวมถึงตัวดำเนินการที่ปลอดภัย ?. ตัวดำเนินการ Elvis ?: และตัวดำเนินการยืนยันที่ไม่เป็น null !!

โอเปอเรเตอร์โทรปลอดภัย?. อนุญาตให้เรียกใช้เมธอดและเข้าถึงสมบัติบนตัวแปร nullable โดยไม่ต้องเสี่ยงกับ NullPointerException ถ้าตัวแปรเป็น null นิพจน์จะส่งกลับค่า null แทนที่จะโยนข้อยกเว้น

var x: String? = null
val length = x?.length // safe call operator - returns null if x is null

ตัวดำเนินการ Elvis ?: อนุญาตให้ระบุค่าเริ่มต้นหากตัวแปรที่เป็นค่า null เป็นค่า null ถ้าตัวแปรไม่เป็น null โอเปอเรเตอร์จะส่งกลับค่าของมัน มิฉะนั้น จะส่งคืนค่าเริ่มต้นที่ระบุ

var x: String? = null
val length = x?.length ?: 0 // Elvis operator - returns 0 if x is null

ตัวดำเนินการยืนยันไม่เป็น null !! บอกคอมไพเลอร์ว่าตัวแปร nullable ไม่เป็น null และจะแสดง NullPointerException ถ้าตัวแปรเป็น null

var x: String? = null
val length = x!!.length // not-null assertion operator - throws NullPointerException if x is null

สิ่งสำคัญคือต้องสังเกตว่าตัวดำเนินการยืนยันที่ไม่เป็น null !! ควรใช้ด้วยความระมัดระวัง เนื่องจากอาจทำให้เกิดข้อผิดพลาดรันไทม์ได้ ควรใช้เมื่อแน่ใจว่าตัวแปรนั้นไม่เป็น null

Kotlin มีประเภทตัวแปรที่หลากหลาย รวมถึงประเภทตัวเลข อักขระ บูลีน สตริง อาร์เรย์ คอลเลกชัน และประเภท nullable นอกจากนี้ยังมีระบบความปลอดภัยค่า Null ที่แข็งแกร่งซึ่งรับรองว่าตัวแปรที่ไม่ใช่ค่า Null ได้รับการเริ่มต้นและตัวแปรค่า Nullable จะถูกทำเครื่องหมายไว้อย่างชัดเจน และจัดเตรียมตัวดำเนินการที่ปลอดภัยสำหรับค่า Null เพื่อหลีกเลี่ยง NullPointerExceptions ด้วยไวยากรณ์ที่ชัดเจนและรัดกุม Kotlin เป็นภาษาที่ยอดเยี่ยมสำหรับการพัฒนาแอปพลิเคชันที่แข็งแกร่งและมีประสิทธิภาพในการรับทำแอพที่ดีมากและได้รับความนิยม

KOLTIN ANDROID คืออะไร เริ่มต้น อย่างไร

ตอนที่ 1 การติดตั้ง Kotlin ด้วย IntelliJ IDEA และโปรแกรม Hello World
ตอนที่ 3 การใช้งานเงื่อนไข (Conditional Expressions)ใน Kotlin