Kotlin vs Java - ความแตกต่างระหว่างสองคืออะไร

ผู้เขียน: John Stephens
วันที่สร้าง: 24 มกราคม 2021
วันที่อัปเดต: 1 กรกฎาคม 2024
Anonim
Kotlin vs Java | Java or Kotlin for Android Development | Kotlin Tutorial | Edureka
วิดีโอ: Kotlin vs Java | Java or Kotlin for Android Development | Kotlin Tutorial | Edureka

เนื้อหา


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

เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับ Java รับหลักสูตรเบื้องต้นเกี่ยวกับ Java ฟรีที่ Make Android Apps

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

แต่ถ้าคุณเปลี่ยนจาก Java เป็น Kotlin คุณจะได้อะไรอย่างแน่นอน Kotlin มีคุณสมบัติอะไรบ้างที่ Java ไม่ได้ใช้และในทางกลับกัน

ในบทความนี้เราจะดูถึงความแตกต่างที่สำคัญระหว่าง Kotlin กับ Java

Kotlin vs Java ซึ่งในภายหลังจะให้รหัสที่กระชับยิ่งขึ้นโดยไม่มี findViewByIds

หากคุณเปรียบเทียบคลาส Kotlin กับคลาส Java ที่ทำงานเหมือนกันคลาส Kotlin จะมีความกระชับมากกว่าปกติ แต่มีพื้นที่หนึ่งที่ Kotlin สามารถลดจำนวนรหัสที่คุณต้องเขียนอย่างจริงจัง: findViewByIds.


ส่วนขยาย Kotlin Android ช่วยให้คุณสามารถนำเข้าข้อมูลอ้างอิงไปยังไฟล์ View ของคุณซึ่งคุณจะสามารถทำงานร่วมกับมุมมองนั้นได้ราวกับว่าเป็นส่วนหนึ่งของกิจกรรม ผลลัพธ์? คุณไม่จำเป็นต้องเขียนวิธี findViewById อีกเลย!

ก่อนที่คุณจะสามารถใช้ส่วนขยายเหล่านี้คุณจะต้องเพิ่มปลั๊กอินพิเศษลงในไฟล์ build.gradle ระดับโมดูลของคุณ (ใช้ปลั๊กอิน: 'kotlin-android-extensions') แต่หลังจากนั้นคุณก็พร้อมที่จะเริ่มนำเข้า Views สำหรับ ตัวอย่างหากไฟล์ activity_main.xml ของคุณมี TextView พร้อม ID textView คุณจะต้องเพิ่มสิ่งต่อไปนี้ในกิจกรรมของคุณ:

นำเข้า kotlinx.android.synthetic.main.activity_main.textView

จากนั้นคุณสามารถเข้าถึง TextView นี้โดยใช้เพียง ID:

textView.setText ("Hello World")

นี่คือ มาก รวบรัดมากกว่า Java เทียบเท่า:

TextView text = (TextView) findViewById (R.id.textView); text.setText ("Hello World");

Kotlin นั้นปลอดภัยเป็นค่าเริ่มต้น

NullPointerExceptions เป็นแหล่งใหญ่ของแห้วสำหรับนักพัฒนา Java Java อนุญาตให้คุณกำหนด null ให้กับตัวแปรใด ๆ แต่ถ้าคุณพยายามใช้การอ้างอิงวัตถุที่มีค่า Null ให้รั้งตัวเองให้เจอ NullPointerException!


อ่านเพิ่มเติม: Kotiln สำหรับการแนะนำ Android

ใน Kotlin ทุกประเภทจะไม่สามารถยกเลิกได้ (ไม่สามารถเก็บค่า null) ได้ตามค่าเริ่มต้น หากคุณพยายามกำหนดหรือส่งคืน null ในรหัส Kotlin ของคุณจะไม่สามารถรวบรวมได้ดังนั้นจะไม่มีการรวบรวมบรรทัดต่อไปนี้:

ชื่อ val: String = null

fun getName (): String = null

ถ้าคุณ จริงๆ ต้องการกำหนดค่า Null ให้กับตัวแปรใน Kotlin จากนั้นคุณจะต้องทำเครื่องหมายอย่างชัดเจนว่าตัวแปรนั้นเป็น nullable โดยเพิ่มเครื่องหมายคำถามหลังประเภท:

หมายเลข val: Int? = null

สิ่งนี้ทำให้แทบเป็นไปไม่ได้ที่จะพบ NullPointerExceptions ใน Kotlin - ในความเป็นจริงหากคุณพบข้อยกเว้นนี้โอกาสที่จะเกิดขึ้นเพราะคุณได้ขอให้ Kotlin โยนรหัสหนึ่งหรือ NullPointerException มาจากรหัส Java ภายนอก

ฟังก์ชั่นส่วนต่อขยาย

Kotlin ให้ความสามารถแก่นักพัฒนาในการขยายชั้นเรียนด้วยฟังก์ชั่นใหม่ซึ่งเหมาะอย่างยิ่งหากมีคลาสที่คุณมักจะรู้สึกว่าขาดวิธีการที่สำคัญ!

‘ฟังก์ชั่นการขยายเหล่านี้ไม่พร้อมใช้งานใน Java แม้ว่าจะมีให้ในภาษาการเขียนโปรแกรมอื่น ๆ ที่คุณสามารถใช้สำหรับการพัฒนา Android เช่น C #

อ่านต่อไป: Java Tutorial สำหรับผู้เริ่มต้น

คุณสร้างฟังก์ชันส่วนขยายโดยนำหน้าชื่อของคลาสที่คุณต้องการขยาย (เช่น "String") ไปยังชื่อของฟังก์ชันที่คุณกำลังสร้าง ('styleString’) ตัวอย่างเช่น:

fun String.styleString (): String {// Style string แล้วส่งคืน //}

จากนั้นคุณสามารถเรียกใช้ฟังก์ชันนี้กับอินสแตนซ์ของคลาสเสริมผ่านทาง สัญกรณ์ราวกับว่ามันเป็นส่วนหนึ่งของชั้นเรียนที่:

myString.styleString ()

Coroutines เป็นพลเมืองชั้นหนึ่ง

เมื่อใดก็ตามที่คุณเริ่มการดำเนินการที่ยาวนานเช่นเครือข่าย I / O หรืองานที่ใช้ CPU มากเธรดการโทรจะถูกบล็อกจนกว่าการดำเนินการจะเสร็จสิ้น เนื่องจาก Android เป็นเธรดเดี่ยวโดยค่าเริ่มต้นทันทีที่คุณบล็อกเธรดหลัก UI ของแอปของคุณจะหยุดและจะไม่ตอบสนองจนกว่าการดำเนินการจะเสร็จสมบูรณ์

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

ในขณะที่คุณสามารถสร้างเธรดเพิ่มเติมใน Kotlin คุณสามารถใช้ coroutines Coroutines ดำเนินงานที่ใช้เวลายาวนานและเข้มข้นโดยการหยุดการทำงานที่จุดใดจุดหนึ่งโดยไม่ปิดกั้นเธรดจากนั้นกลับมาใช้ฟังก์ชันนี้อีกครั้งในภายหลังซึ่งอาจเกิดจากเธรดอื่น สิ่งนี้ช่วยให้คุณสามารถสร้างโค้ดอะซิงโครนัสที่ไม่มีการบล็อกได้ รูปลักษณ์ ซิงโครนัสและมีความชัดเจนกระชับและอ่านง่ายขึ้น Coroutines ยังไม่ซ้อนกันดังนั้นจึงมีการใช้หน่วยความจำต่ำกว่าเมื่อเปรียบเทียบกับเธรดและเปิดประตูไปสู่รูปแบบเพิ่มเติมของการเขียนโปรแกรมแบบไม่ซิงโครนัสแบบอะซิงโครนัสเช่น async / await

ไม่มีข้อยกเว้นที่ตรวจสอบแล้ว

Kotlin ไม่ได้ตรวจสอบข้อยกเว้นดังนั้นคุณไม่จำเป็นต้องตรวจจับหรือประกาศข้อยกเว้นใด ๆ

ไม่ว่าจะเป็นสิ่งที่ดึงดูดให้คุณไป Kotlin หรือทำให้คุณต้องการติดกับ Java จะขึ้นอยู่กับความคิดเห็นของคุณเกี่ยวกับข้อยกเว้นที่เลือกเพราะนี่เป็นคุณสมบัติที่แบ่งชุมชนนักพัฒนา หากคุณเบื่อลอง / จับบล็อกทำให้รหัส Java ของคุณยุ่งเหยิงคุณก็จะมีความสุขกับการละเลยนี้อย่างไรก็ตามหากคุณพบว่ามีข้อยกเว้นที่ตรวจสอบแล้วแนะนำให้คุณคิดเกี่ยวกับการกู้คืนข้อผิดพลาด โค้ดคุณมีแนวโน้มที่จะเห็นสิ่งนี้เป็นพื้นที่ที่ Java มีขอบเหนือ Kotlin

การสนับสนุนพื้นเมืองสำหรับการมอบหมาย

Kotlin ซึ่งแตกต่างจาก Java รองรับรูปแบบการออกแบบ“ การรวมทับสิ่งที่สืบทอด” ผ่านการมอบหมายชั้นหนึ่ง (บางครั้งเรียกว่าการมอบหมายโดยนัย) การมอบหมายคือที่การรับวัตถุมอบหมายการดำเนินการไปยังวัตถุผู้รับมอบสิทธิ์ที่สองซึ่งเป็นวัตถุตัวช่วยที่มีบริบทต้นฉบับ

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

คลาสผู้รับมอบสิทธิ์ {โอเปอเรเตอร์ความสนุกสนาน getValue (... ) ... ... ... } โอเปอเรเตอร์ความสนุก setValue (... ) ... ... ... }}

จากนั้นเมื่อคุณสร้างคุณสมบัติคุณสามารถประกาศว่าฟังก์ชัน getter และ setter สำหรับคุณสมบัติเฉพาะนี้ได้รับการจัดการโดยคลาสอื่น:

คลาส MyClass {var property: String โดย Delegate ()}

คลาสข้อมูล

มันไม่ใช่เรื่องแปลกสำหรับโครงการที่มีหลายคลาสที่ไม่ทำอะไรนอกจากเก็บข้อมูล ใน Java คุณจะพบว่าคุณเขียนโค้ดสำเร็จรูปจำนวนมากสำหรับคลาสเหล่านี้แม้ว่าชั้นเรียนจะมีฟังก์ชันการทำงานน้อยมาก โดยทั่วไปคุณจะต้องกำหนดตัวสร้างฟิลด์เพื่อเก็บข้อมูลฟังก์ชันตัวรับและตัวตั้งค่าสำหรับแต่ละฟิลด์รวมถึงฟังก์ชัน hashCode (), equals () และ toString ()

ใน Kotlin หากคุณรวมคำหลัก 'data' ไว้ในคำจำกัดความของคลาสแล้วคอมไพเลอร์จะทำงานทั้งหมดนี้ให้คุณรวมถึงการสร้างผู้ได้รับและ setters ที่จำเป็นทั้งหมด:

ชั้นข้อมูลวันที่ (เดือน var: สตริงวัน var: Int)

สมาร์ทดุ

ใน Java คุณต้องตรวจสอบประเภทและจากนั้นจึงโยนวัตถุในสถานการณ์ที่ชัดเจนแล้วว่าสามารถโยนวัตถุได้

สมาร์ทของ Kotlin สามารถจัดการ casts ซ้ำซ้อนเหล่านี้ให้คุณได้ดังนั้นคุณไม่จำเป็นต้องใช้คำสั่งนี้หากคุณตรวจสอบกับโอเปอเรเตอร์ ‘is’ ของ Kotlin แล้ว ตัวอย่างเช่นคอมไพเลอร์รู้ว่าการโยนต่อไปนี้ปลอดภัย:

if (hello is String) {printString (hello)}

สนับสนุนการก่อสร้าง

ซึ่งแตกต่างจาก Java คลาส Kotlin สามารถมีตัวสร้างหลักและตัวสร้างรองอย่างน้อยหนึ่งตัวซึ่งคุณสร้างโดยรวมไว้ในการประกาศคลาสของคุณ:

คลาส MainActivity Constructor (ชื่อแรก: สตริง) {}

ไม่มีการสนับสนุนสำหรับการแปลงแบบขยายโดยนัย

Kotlin ไม่สนับสนุนการแปลงแบบกว้างสำหรับตัวเลขดังนั้นประเภทที่เล็กลงจึงไม่ถูกแปลงเป็นประเภทที่ใหญ่กว่าโดยปริยาย ใน Kotlin หากคุณต้องการกำหนดค่าชนิด Byte ให้กับตัวแปร Int คุณจะต้องทำการแปลงอย่างชัดเจนในขณะที่ Java รองรับการแปลงโดยนัย

ไลบรารีการประมวลผลคำอธิบายประกอบด้วย Kotlin

Kotlin สนับสนุนเฟรมเวิร์กและไลบรารี Java ที่มีอยู่ทั้งหมดรวมถึงเฟรมเวิร์กขั้นสูงที่ต้องใช้การประมวลผลคำอธิบายประกอบแม้ว่าบางไลบรารี Java จะมีส่วนขยาย Kotlin เช่น RxKotlin

หากคุณต้องการใช้ห้องสมุด Java ที่อาศัยการประมวลผลคำอธิบายประกอบดังนั้นการเพิ่มไปยังโครงการ Kotlin ของคุณจะแตกต่างกันเล็กน้อยเนื่องจากคุณจะต้องระบุการพึ่งพาโดยใช้ Kotlin-kapt ปลั๊กอินจากนั้นใช้เครื่องมือประมวลผลคำอธิบายประกอบแบบ Kotlin (kapt) แทน annotationProcessor ตัวอย่างเช่น:

// ใช้ปลั๊กอิน // ใช้ปลั๊กอิน: kotlin-kapt // เพิ่มการอ้างอิงที่เกี่ยวข้องโดยใช้การกำหนดค่า kapt // การพึ่งพา {kapt "com.google.dagger: dagger-compiler: $ dagger-version" ... ... ... }

ความสามารถในการแลกเปลี่ยนกับ Java

เมื่อถกเถียงว่าจะใช้การพัฒนา Kotlin หรือ Java สำหรับ Android คุณควรทราบว่ามีตัวเลือกที่สาม: ใช้ทั้งคู่. แม้จะมีความแตกต่างทั้งหมดระหว่างสองภาษา Java และ Kotlin นั้นทำงานร่วมกันได้ 100% คุณสามารถเรียกรหัส Kotlin จาก Java และคุณสามารถเรียกรหัส Java จาก Kotlin ดังนั้นจึงเป็นไปได้ที่จะมีคลาส Kotlin และ Java เคียงข้างกันในโครงการเดียวกันและทุกอย่างจะยังคงรวบรวม

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

หากคุณต้องการลอง Kotlin ด้วยตัวคุณเองตราบใดที่คุณมี Android Studio 3.0 Preview หรือสูงกว่าติดตั้งอยู่คุณสามารถเริ่มต้นได้สองวิธี:

  • สร้างโครงการ Android Studio ใหม่ วิธีที่ง่ายที่สุดคือการสร้างโครงการใหม่และเลือกช่องทำเครื่องหมาย "รวมการสนับสนุน Kotlin" จากตัวช่วยสร้างการสร้างโครงการ

  • เพิ่มคลาส Kotlin ไปยังไดเรกทอรีที่มีอยู่ คลิกควบคุมไดเรกทอรีที่ต้องการจากนั้นเลือก ‘ไฟล์> ใหม่> ไฟล์ Kotlin / คลาส’ Android Studio จะแสดงแบนเนอร์ที่ขอให้คุณกำหนดค่าโครงการของคุณเพื่อสนับสนุน Kotlin คลิกลิงก์ igure กำหนดค่า ’และทำตามคำแนะนำบนหน้าจอ

  • แปลงไฟล์ Java ที่มีอยู่เป็น Kotlin คุณสามารถเรียกใช้ไฟล์ Java ใด ๆ ผ่านตัวแปลง Kotlin โดยคลิกควบคุมไฟล์และเลือก ‘รหัส> แปลงไฟล์ Java เป็นไฟล์ Kotlin’

ห่อ

อย่างที่คุณเห็นมีเหตุผลที่ดีมากมายที่จะชอบ Kotlin กับ Java แต่มีบางพื้นที่ที่ Java มีอยู่เหนือ บางทีที่สะดุดตาที่สุด: นักพัฒนา Android หลายคนคุ้นเคยกับ Java มากขึ้นในตอนนี้ ดูเหมือนว่าการอภิปรายของ Kotlin กับ Java จะไม่เสร็จสมบูรณ์ในเวลาอันใกล้นี้โดยทั้งคู่มีข้อดีของตัวเอง ดังนั้นคุณกำลังจะเปลี่ยนไปใช้ Kotlin หรือคุณรู้สึกว่า Java ยังคงเป็นตัวเลือกที่ดีที่สุดสำหรับการพัฒนา Android?

อ่านต่อไป: บทนำเกี่ยวกับไวยากรณ์ Java สำหรับการพัฒนา Android

แม้ว่าเราจะเห็นรอยรั่วเล็กน้อยเกี่ยวกับ OnePlu 7 Pro แต่เราไม่เห็นภาพใด ๆ เท่าที่เป็นทางการ การเปลี่ยนแปลงนั้นในวันนี้เนื่องจากตอนนี้เรามีสิ่งที่ดูเหมือนจะเป็นข่าวของ OnePlu 7 Pro (ผ่านทางWinFuture แล...

งานเปิดตัวสำหรับ OnePlu 7 และ OnePlu 7 Pro อยู่ห่างออกไปเล็กน้อยในสัปดาห์นี้ วันนี้เราได้รูปลักษณ์ที่ดีที่สุดของเราในรุ่น Pro ซึ่งรวมถึงตัวเลือกสีแรกที่เห็นได้ชัดว่าขายเป็นอัลมอนด์ (ผ่าน WinFuture)....

คำแนะนำของเรา