Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

Android में Java और Kotlin के अंतर उदाहरण सहित

Kotlin को Android डेवलपमेंट में Java के कई एन्हांसमेंट्स को ध्यान में रखकर पेश किया गया था। मुख्य फायदे:

  • कम कोड: समान फंक्शनैलिटी के लिए कम लाइन्स
  • नल सेफ्टी: कंपाइल-टाइम पर नल पॉइंटर एक्सेप्शन प्रिवेंशन
  • डेटा क्लास: POJO के बजाय संक्षिप्त डेटा क्लास

कोड तुलना

TextView सेट करना

// Java
TextView displayText = findViewById(R.id.textView); 
displayText.setText("Hello World")

// Kotlin (सिंथेटिक प्रॉपर्टी या ViewBinding)
textView.text = "Hello World"

नल सेफ्टी

// Java - रनटाइम पर NPE संभव
String value = "abc"; 
value = null; // कंपाइल होता है, रनटाइम पर क्रैश

// Kotlin - कंपाइल टाइम एरर
var value: String = "abc" 
value = null // कंपाइल एरर: Null can not be a value of a non-null type String

// नलएबल टाइप
var nullableValue: String? = "abc" 
nullableValue = null // OK
println(nullableValue?.length) // सेफ कॉल

डेटा क्लास vs POJO

// Java POJO (गेटर/सेटर/टॉस्ट्रिंग/इक्वल्स/हैशकोड मैन्युअल)
public class User { 
    private String name; 
    private int age; 
    // कंस्ट्रक्टर, गेटर, सेटर, toString, equals, hashCode... ~50 लाइन्स
}

// Kotlin Data Class (ऑटो-जेनरेटेड)
data class User(val name: String, val age: Int) 
// equals, hashCode, toString, copy(), componentN() ऑटोमैटिक

महत्वपूर्ण अंतर टेबल

क्र.सं. की Java Kotlin
1 अपवाद (Exceptions) चेक्ड एक्सेप्शन उपयोग करता है (try-catch अनिवार्य) कोई चेक्ड एक्सेप्शन नहीं, कंपाइल-टाइम एरर थ्रो करता है
2 नल हैंडलिंग नल चेक लागू नहीं, NPE रनटाइम पर कंपाइल टाइम पर नल चेक लागू
3 नॉन-प्राइवेट फील्ड्स कंस्ट्रक्ट्स में नॉन-प्राइवेट फील्ड्स अनुमत कंस्ट्रक्ट्स में नॉन-प्राइवेट फील्ड्स अनुमत नहीं
4 ऐरे (Arrays) कोवेरिएंट (String[] → Object[] असाइनमेंट संभव) इनवेरिएंट (टाइप सेफ्टी)
5 टर्नरी ऑपरेटर है: condition ? a : b नहीं है, if-else एक्सप्रेशन उपयोग करें: if (cond) a else b
6 एक्सटेंशन फंक्शन नहीं (यूटिलिटी क्लासेस उपयोग करें) हां - मौजूदा क्लास में फंक्शन जोड़ें
7 कोरूटीन नहीं (थ्रेड्स, AsyncTask, RxJava) बिल्ट-इन कोरूटीन सपोर्ट (स्ट्रक्चर्ड कंकरेंसी)
8 स्मार्ट कास्ट नहीं (मैन्युअल कास्ट आवश्यक) हां - आइस चेक के बाद ऑटो कास्ट
9 डिफॉल्ट आर्गुमेंट्स नहीं (ओवरलोडिंग आवश्यक) हां - फंक्शन पैरामीटर्स में डिफॉल्ट वैल्यू
10 नामित आर्गुमेंट्स नहीं हां - func(name="value", age=25)

अतिरिक्त Kotlin फीचर्स

एक्सटेंशन फंक्शन

fun String.isValidEmail(): Boolean = this.matches(Regex(".+@.+\\..+")) 

// उपयोग
"test@example.com".isValidEmail() // true

कोरूटीन

// Java: AsyncTask/Thread/RxJava - जटिल
// Kotlin: सरल और स्ट्रक्चर्ड
lifecycleScope.launch { 
    val result = withContext(Dispatchers.IO) { 
        api.getData() // बैकग्राउंड थ्रेड 
    } 
    updateUI(result) // मेन थ्रेड 
}

सील्ड क्लासेस

sealed class Result { 
    data class Success(val data: T) : Result() 
    data class Error(val exception: Throwable) : Result() 
    object Loading : Result() 
}

निष्कर्ष

Kotlin आधुनिक, संक्षिप्त और सुरक्षित है। Google द्वारा 2019 से "Kotlin First" घोषित। नए प्रोजेक्ट्स के लिए Kotlin अनुशंसित। मौजूदा Java कोड के साथ इंटरऑपरेबिलिटी 100% है।

  1. Android में gravity और layout_gravity का अंतर Android में gravity और layout_gravity का अंतर

    त्वरित सारांश विशेषताgravitylayout_gravity लागू होता हैव्यू के अंदर कंटेंट परव्यू को पेरेंट के अंदर पोजिशन करता है एनालॉजीबॉक्स के अंदर टेक्स्ट संरेखणकंटेनर में बॉक्स की स्थिति पेरेंट आवश्यकताकोई विशेष नहींपेरेंट LinearLayout/FrameLayout होना चाहिए

  1. Android में onCreate() और onStart() में क्या अंतर है Android में onCreate() और onStart() में क्या अंतर है

    परिचयएक्टिविटी जीवनचक्र में `onCreate()` और `onStart()` दो महत्वपूर्ण कॉलबैक हैं, लेकिन उनके उद्देश्य और समय अलग-अलग हैं।मुख्य अंतरपहलूonCreate()onStart()कब कॉल होता हैएक्टिविटी पहली बार बनने परएक्टिविटी उपयोगकर्ता को दिखाई देने वाली होती हैआवृत्तिजीवनचक्र में एक बारहर बार एक्टिविटी फोरग्राउंड में आ

  1. एंड्रॉइड में fill_parent (match_parent) और wrap_content में क्या अंतर है? एंड्रॉइड में fill_parent (match_parent) और wrap_content में क्या अंतर है?

    एंड्रॉइड Layout में match_parent vs wrap_content — पूरा अंतर समझाया गया ये दो सबसे मौलिक लेआउट चौड़ाई/ऊंचाई मोड हैं जो हर एंड्रॉइड डेवलपर को पता होने चाहिए। नोट: fill_parent API लेवल 8 (Android 2.2) में डिप्रिकेटेड हो गया था — इसका आधुनिक नाम match_parent है। दोनों समान व्यवहार करते हैं। त्वरित तुल