কম্পিউটার

এখনও আপনার অ্যান্ড্রয়েড অ্যাপস ডেভেলপ করতে জাভা ব্যবহার করছেন? পরিবর্তে Kotlin চেষ্টা করুন.

Kotlin গত 2 বছর ধরে একটি বিশাল অগ্রগতি হয়েছে, এটি সর্বত্র একটি প্রবণতামূলক বিষয় এবং এর জনপ্রিয়তা এখনও বাড়ছে৷ এবং এটাও অফিসিয়াল যে Google কোটলিনকে অ্যান্ড্রয়েড অ্যাপ ডেভেলপমেন্টের অফিসিয়াল ভাষা হওয়ার জন্য চাপ দিয়েছে।

কিন্তু তারপরও, অনেক লোক এখনও অ্যান্ড্রয়েড বিকাশের জন্য কোটলিনের চেয়ে জাভা পছন্দ করে, কেন এমন হয়? এর একটি প্রধান কারণ হল লোকেরা এখনও জাভা থেকে কোটলিনে তাদের পছন্দের প্রধান ভাষা পরিবর্তন করতে স্বাচ্ছন্দ্য বোধ করে না, লোকেরা নতুন জিনিসে পরিবর্তন হতে ভয় পায়।

এখনই কোটলিন ব্যবহার করা শুরু করুন, সহজ উপায়

প্রকৃতপক্ষে, জাভা থেকে কোটলিনে স্যুইচ করা খুব সহজ, একটি খুব নমনীয় ভাষা হওয়ায় আপনি সহজেই কোটলিনকে কোড করতে পারেন তবে বাজেভাবে, এটি জাভা!

এখনও আপনার অ্যান্ড্রয়েড অ্যাপস ডেভেলপ করতে জাভা ব্যবহার করছেন? পরিবর্তে Kotlin চেষ্টা করুন.
এটি দেখতে কোটলিন, কিন্তু আসলে এটি জাভা। কিন্তু আমি আপনাকে আশ্বস্ত করছি, সব ঠিক হয়ে যাবে!!

তাই এখন, জাভা থেকে কোটলিনে স্যুইচ করার সময় এখানে বেশ কয়েকটি বিষয় খেয়াল রাখতে হবে:

1. জাভা ইন্টারঅপারেবিলিটি
কোটলিন জাভার সাথে সম্পূর্ণ আন্তঃঅপারেবল এবং অন্যভাবেও। এর মানে কি, এর মানে হল যে আপনার কোটলিন আপনার জাভা কোড কল করতে পারে, এটি অ্যাপ মাইগ্রেশনের জন্য জিনিসগুলিকে খুব সহজ করে তোলে, আপনি ইতিমধ্যে জাভা দিয়ে অর্ধেক কোড করেছেন? কোন ব্যাপার না, কোড কোটলিন যাইহোক।

২. আর কোন আদিম ডেটা প্রকার নেই
int ব্যবহার করে নির্বাচন করার সময় মনে রাখবেন অথবা Int জাভাতে আপনার অর্ধেক দিন লাগে? কোটলিনে এখন আর কোন আদিম ডেটা টাইপ নেই, সবকিছুর পরিবর্তে অবজেক্টে মোড়ানো হয়েছে।

3. সামান্য পরিবর্তিত সিনট্যাক্স (কিন্তু চিন্তা করবেন না এটি ধরা সহজ)
ভেরিয়েবল, ফাংশন এবং ক্লাস ডিক্লেয়ারেশনের মতো বেশ কিছু সিনট্যাক্স সামান্য পরিবর্তন করা হয়েছে, কিন্তু আপনি যদি জাভা-এর মতো ওওপি ব্যাকগ্রাউন্ড থেকে আসেন, তাহলে এটা তেমন একটা সমস্যা হবে না। এবং এছাড়াও, অকার্যকর কীওয়ার্ড এবং সেমি-কোলন (';') সরানো হয়েছে, সেই সেমিকোলন অপসারণের জন্য কোটলিনকে ধন্যবাদ!!
আমি আপনাকে অ্যান্ড্রয়েড ক্লাসের সাথে মৌলিক উদাহরণগুলি উপস্থাপন করব:

//Inheritance and implementation is using ':' now
class BasicActivity : AppCompatActivity() {
    //variables declaration is now variable name first then type
    var a :Int = 10 //var is for mutable
    val b :Int = 15 //val is for immutable

    /*lateinit keyword must be added for initialisation of non-
    primitive type without initial value in Kotlin*/
    lateinit var someTextView:TextView

    //Also, no more new keyword here
    var gameList:List<Integer> = ArrayList()

    //overriding is using keyword instead of 
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_basic)
    }
}

4. টাইপ ইনফারেন্স
কোটলিন ভেরিয়েবলের জন্য প্রকার অনুমান প্রদান করে জীবনকে সহজ করে তুলবে:

var a = 5 //will automatically infer this as integer
var b = "John" // will automatically infer this as String

5. শূন্য নিরাপত্তা পরীক্ষা
নাল পয়েন্টার ব্যতিক্রম এড়াতে Kotlin নাল নিরাপত্তা পরীক্ষা প্রদান করেছে। শূন্য মান প্রদান করতে পারে এমন প্রতিটি ভেরিয়েবলকে ? দিয়ে চিহ্নিত করা হবে (এবং চিহ্নিত করা আবশ্যক) চিহ্ন.

var a:String? = null
var b:String = null //not allowed 

এটি নাল-পয়েন্টার ব্যতিক্রম (জাভা বিলন ডলার ভুল) এড়াতে নাল নিরাপত্তা কল প্রদান করে

//not allowed, a might be null
a.function() 

// this will not throw null pointer, instead will continue the flow
a?.function()

//force function call, can cause NPE, use this only if 100% sure that this value will not be null
a!!.function()

6. আর কোন স্ট্যাটিক কীওয়ার্ড নেই
স্ট্যাটিক কীওয়ার্ড এখন অবজেক্ট কীওয়ার্ড দিয়ে প্রতিস্থাপিত হয়েছে, ক্লাস এবং পদ্ধতি উভয়ের জন্য, আরও নির্দিষ্টভাবে পদ্ধতির জন্য কম্প্যানিয়ন অবজেক্ট।

7. কেস পরিবর্তন করা হয়েছে
স্যুইচ কেস এখন একটি নতুন কীওয়ার্ডে পরিবর্তন করা হয়েছে, যখন বলা হয়। যা পরিষ্কার এবং আরও নমনীয় দেখায়:

when (x) {
    1 -> println("One")
    2 -> print("Two")
	else -> print("Others")
}

8. আর চেক করা ব্যতিক্রম নেই
মনে আছে আপনি যখন জাভাতে কিছু অপারেশন বা কাস্টিং করছেন, এবং সেই লাল সতর্কতাটি বেরিয়ে আসে এবং আপনাকে সেখানে ব্যতিক্রম চেকিং যোগ করতে বলেছিল? এটি এখন কোটলিনে সরিয়ে ফেলা হয়েছে। এখন, আপনার IDE আপনাকে আর কোনো ব্যতিক্রম করতে বাধ্য করবে না!!

এটি সবই সেই অংশের জন্য যা আপনাকে কোটলিনে বিকাশ শুরু করতে হবে, তবে মূর্তভাবে জাভা।
এখন কোটলিনে প্রবেশ করা কঠিন নয়, তাই না? এখন কোটলিন জাভা থেকে আলাদা বলে মনে হয় না।

কোটলিন দ্বারা প্রদান করা বৈশিষ্ট্যগুলি

এখনও আপনার অ্যান্ড্রয়েড অ্যাপস ডেভেলপ করতে জাভা ব্যবহার করছেন? পরিবর্তে Kotlin চেষ্টা করুন.

এখন, কোটলিন এবং জাভা কীভাবে আলাদা তা দেখে নেওয়ার পরে, আমাদের কোটলিনের দেওয়া বৈশিষ্ট্যগুলি এবং কীভাবে ধীরে ধীরে কোটলিন, কোটলিন পদ্ধতিটি শুরু করতে হবে তাও দেখতে হবে:

1. নমনীয়তা
কোটলিনে আমার ভালবাসার একটি প্রধান কারণ হল ভাষার নমনীয়তা। আপনি OOP বিশুদ্ধতাবাদী? আপনি কি ফাংশনাল প্রোগ্রামিং চেষ্টা করতে চুলকাচ্ছেন যা বর্তমানে চারপাশের আলোচিত বিষয়? এবং কোডিং এর ভালবাসার জন্য ঈশ্বর, আপনি কোটলিনে উভয়ই করতে পারেন! FP প্রদান করে সমস্ত বৈশিষ্ট্য সম্পূর্ণরূপে প্রদান না করা সত্ত্বেও, এটি সমর্থন করার জন্য যথেষ্ট ভাল।

২. ল্যাম্বডা সমর্থন
হ্যাঁ, আমি জানি যে এখন জাভা 8 ল্যাম্বডা সমর্থন করে, কিন্তু কোটলিন এতে প্রথম এসেছে এবং এটি এতে খুব ভাল কাজ করে। অবশ্যই, ল্যাম্বডা ফাংশন ব্যবহারে রূপান্তর করা প্রথমে কঠিন হবে, তবে যেমন বলা হয়েছে, কোটলিন এতে সত্যিই নমনীয়। তাই আরে, এটা তোমার কল!
কিছু অ্যান্ড্রয়েড লাইব্রেরি ল্যাম্বডা সমর্থন সক্ষম করেছে, উদাহরণস্বরূপ View.OnClickListener (আপনি যদি অ্যান্ড্রয়েড ব্যাকগ্রাউন্ড থেকে আসেন, আমি নিশ্চিত যে এই পদ্ধতিটি ইতিমধ্যেই আপনার কাছে খুব পরিচিত) :

val randomButton : Button

//using lambda function as argument
randomButton.setOnClickListener{v -> doRandomStuff(v) }

3. ডেটা ক্লাস
Kotlin মডেল/এন্টিটি ক্লাসের একটি বিকল্প প্রদান করেছে, যাকে বলা হয় ডেটা ক্লাস। এটি অপ্রয়োজনীয় সেটার গেটারের প্রয়োজনীয়তা দূর করে এবং এটির জন্য একটি তৈরি না করেই অন্তর্নির্মিত সমান পদ্ধতি এবং টোস্ট্রিং ফাংশন রয়েছে। এটি ব্যবহার করাও খুব সহজ:

data class Person(
    val id:String,
    val name:String = "John Doe" //Default Value
)

//Initialisation block
var person = Person("id","Not John")

4. এক্সটেনশন ফাংশন
কোটলিন এক্সটেনশন ফাংশন ব্যবহারের অনুমতি দেয়, যা কোডকে আরও পাঠযোগ্য করে তোলে। এছাড়াও, এটি আপনাকে ক্লাসটি পরিবর্তন না করেই একটি ক্লাসে কার্যকারিতা দিতে সক্ষম করবে:

fun Int.superOperation(anotherInt:Int):Int {
    val superNumber = this * anotherInt + anotherInt
    return superNumber
}

//you can now call the functions
val someNumber = 5
val superNumber = someNumber.superOperation(10) //65

5. নামযুক্ত এবং ডিফল্ট আর্গুমেন্ট
C# এর মতো, কোটলিনও এর পদ্ধতিগুলির জন্য নামযুক্ত এবং ডিফল্ট প্যারামিটার সমর্থন করে। এটি প্রতিটি আর্গুমেন্টে মান পাস করার প্রয়োজনীয়তা সম্পূর্ণভাবে সরিয়ে দেয়। আপনি পরিবর্তন করতে চান যা মান নির্বাচন করতে পারেন, এবং voila! আপনার 10টি ফাংশন কলের জন্য একই নির্দিষ্ট মান পাস করতে আর কোন ঝামেলা নেই!

//variable declaration
fun someOperations(var x: Int, var y:Int, var z:Int = 1){
	return x+y+z
}

someOperations(1,2) //return 4
someOpeartions(y = 1, x = 1) //return 3

6. রেফারেন্সিয়াল সমতা
কোটলিন রেফারেন্সিয়াল ইকুইলিটি ('===') এর সাথেও আসে, এটি পরীক্ষা করবে যে দুটি ভেরিয়েবল বর্তমানে একই অবজেক্টকে উল্লেখ করছে কিনা।

var a = 10
var b = 10
a == b //true
a === b //true also, primitive type object equation will only check its value

data class Person (val name: String)

val p1 = Person("John")
val p2 = Person("John")

p1 == p2 //true
p1 === p2 //false

7. স্মার্ট কাস্টিং
এর উদাহরণ ব্যবহার করার পরিবর্তে, কোটলিন এখন কাস্টিং বা টাইপ চেকিংয়ের জন্য ব্যবহার করার জন্য সহজ এবং আরও পাঠযোগ্য সিনট্যাক্স প্রদান করে:

//type checking
//kotlin smart cast mechanism will also automatically change the object into corresponding type if it passes the type checking
if (shape is Circle) {
    println(“it’s a Circle”)
    shape.radius //automatically be casted as Circle
} else if (shapeObject is Square) {
    println(“it’s a Square”)
} else if (shapeObject is Rectangle) {
    print(“it’s a Rectangle”)
}

কোটলিনের asও আছে স্পষ্ট কাস্টিং সক্ষম করতে কীওয়ার্ড:

//It's considered unsafe since it behaves simillarly like static casting
var anotherShape = shape as Circle

//This can be used instead for safe casting
var safeShape = shape as? Circle

8. করোটিন
অ্যাসিঙ্ক্রোনাস কল সবসময় জাভাতে একটি ঝামেলা হয়েছে। থ্রেড তৈরি করতে কোডের অনেক জায়গা লাগে এবং কোডটিকে অপঠনযোগ্য করে তোলে। একটি পরিষ্কার এবং শক্তিশালী কোড প্রদান করে ঐতিহ্যবাহী থ্রেড অপারেশন প্রতিস্থাপন করার জন্য Coroutines তৈরি করা হয়েছে:

import kotlinx.coroutines.*

fun main() {
    // launch a new coroutine in background and continue
    GlobalScope.launch { 
        // non-blocking delay for 1 second (default time unit is ms)
        delay(1000L) 
        
        // print after delay
        println("World!") 
    }
    // main thread continues while coroutine is delayed
    println("Hello,") 
    
    // block main thread for 2 seconds to keep JVM alive
    Thread.sleep(2000L) 
}

Coroutines আরও জটিল ক্রিয়াকলাপগুলিকে সমর্থন করে যেমন চাকরিতে যোগদান, চ্যানেল, ভাগ করা প্রসঙ্গ এবং পিতামাতা। বিস্তারিত এবং আরো ব্যবহার এখানে পড়া যাবে।

এটি গুটিয়ে নেওয়া

সংক্ষেপে বলা যায়, কোটলিন ব্যবহার করা শুরু করা খুবই সহজ, আপনি যেভাবে জাভা কোড করেন তার মতোই আপনি কোটলিনকে কোড করতে পারেন। এবং এছাড়াও, কোটলিন বেশ কিছু বৈশিষ্ট্য প্রদান করেছে যা আপনাকে জাভা ব্যবহার করে প্রান্ত দিতে পারে।

অবশ্যই, জাভা এই মুহূর্তে শক্তিশালী হচ্ছে। তবে নতুন কিছু শেখা শুরু করা কখনই ভুল নয়। আমাদের, প্রোগ্রামার হিসাবে, আজীবন শেখার আলিঙ্গন করতে হবে এবং শেখা বন্ধ করতে হবে না। কোটলিনের সবচেয়ে ভালো জিনিস হল জাভা থেকে মাইগ্রেট করা কতটা সহজ।

পড়ার জন্য ধন্যবাদ. আমি আশা করি আপনি উপভোগ করবেন এবং আশা করি এটি একটি ভাল ব্যবহার হবে! Kotlin অন্বেষণে শুভকামনা, এবং পরের বার দেখা হবে.


  1. থার্ড পার্টি অ্যাপস ব্যবহার না করে আপনার অ্যান্ড্রয়েড ডিভাইসের গতি বাড়ানোর 4টি সহজ উপায়

  2. আপনার অ্যান্ড্রয়েড ডিভাইসে চেষ্টা করার জন্য 6টি এক্সপোজড মডিউল

  3. কীভাবে আপনার কোটলিন অ্যান্ড্রয়েড অ্যানিমেশনগুলি অ্যাক্সেসযোগ্য করবেন

  4. আপনার Android ডিভাইস সুরক্ষিত করার ৮ উপায়