Kotlin with Sunnat – Basics-3

যারা আমার পূর্বের ব্লগ টা দেখেননি তাদের জন্য – Kotlin with Sunnat – Basics-1 এবং Kotlin with Sunnat – Basics-2

আজ আমরা পূর্বের ২টির সাথে যোগ করে ৩য় ধাপে যাব। আজ আমরা দেখব Classes, Constructors এবং Inheritance

Classes

প্রথমেই Class তৈরি করতে আমাদের class কি-ওয়ার্ড ব্যবহার করতে হবে। এতে Java এর মত public, private দেওয়ার প্রয়োজন নেই।

উদাহরণ স্বরূপ- Student নামের একটি Class –

class Student{}

একটি ক্লাসে সাধারণত কিছু Properties এবং  Functions থাকে (অনেকেই একে Methods বলে থাকি) অ্যাড করি।

এখন ৩টি Properties অ্যাড করি। nameuniversity হচ্ছে  String আর  id হচ্ছে  Int 

 
class Student{
    var name:String = ""
    var id:Int = 0
    var university:String? = null
}

এখানে লক্ষ করবেন String ২ টার value ২ রকম। name "" আর university তে null দেওয়া। এখন আসি কেন। প্রথমত name, id এ ২টি কোন ভাবেই null value দিতে পারবে না। আমি Basic-1 এর Nullable Types এ মেনশন করেছিলাম। আপনি যদি initialize এর type এ ? না অ্যাড করলে, সেই initialize এর value null হলে কম্পাইল হবে না। তাই যেহেতু আমরা university এর type এ ? অ্যাড করেছি, এটি null হলেও কম্পাইল করবে।  তাই ২টি String এর value ২ রকম।

এখন আমরা main ফাংশনে একটি instance নেই।

fun main (args:Array<String>){
   var sunnat = Student()
}

কি দেখা যাচ্ছে? Kotlin এ কোন new কি-ওয়ার্ড ব্যবহার হয় না, সরাসরিই কল করতে পারবেন। এখন instance একবার তৈরি হয়ে গেলে Java এর মত এটির সকল properties ব্যবহার করতে পারবেন।

fun main (args:Array<String>){
 var sunnat = Student()

 sunnat.name ="S M Mohi Us Sunnat"
 sunnat.id = 11101043
 sunnat.university = "BRAC University"
}

 

সাধারণত instance এর properties গুলোকে একটি একটি করে initialize করাটা সময় সাপেক্ষ এমনকি এটা Good Code Practice ও না। তাই আমরা কোডের মান উন্নত রাখার জন্য Constructor ব্যবহার করব। Kotlin এ Constructor তৈরি করা খুবই সহজ। Kotlin এর primary constructor কিছু টা C++ এর default constructor এর মত। যদিও কোন কোড constructor এ অন্তর্ভুক্ত নেই। যেমন-

class Student(var name: String, var id: Int, var university: String?){}

fun main(args: Array) {
    var sunnat = Student("Sunnat", 11101043, "BRAC University")
}

যদি class এ কিছু না থাকে তবে {} দেওয়ার দরকার নেই। যেমন-

class Student(var name: String, var id: Int, var university: String?)

fun main(args: Array) {
    var sunnat = Student("Sunnat", 11101043, "BRAC University")
}

আপনি হয়ত খেয়াল করেছেন যে আপনি এই constructor এ  কোন custom code অ্যাড করতে পারবেন না। এই constructor টি হচ্ছে, class এর header এর একটি অংশ আর এটিকে বলা হয় primary constructor
আপনি আরেক ভাবেও লিখতে পারেন

class Student <strong>constructor</strong>(var name: String, var id: Int, var university: String?){}

তবে যদি primary constructor এ কোন annotations বা visibility modifier না থাকে তবে আমরা constructor লিখাটি বাদ দিতে পারি। আমরা আপাতত constructor টি বাদ দিয়েই কাজ করে যাব।

primary constructor এ কোন কোড অন্তর্ভুক্ত থাকে না। তবে Initialization code কে আমরা initializer blocks এ রাখতে পারি যা কিনা init কি-ওয়ার্ড দিয়ে মেনশন করা হয় । যেমন-

class Student (var name: String, var id: Int, var university: String?){
    init {
        var email:String = ""
    }
}

বলা বাহুল্য যে, primary constructor এর parameter গুলো initializer blocks এ ব্যবহার হয়। তবে তারা সরাসরি class body তেও declare করা যায়। যেমন-

class Student (var name: String, var id: Int, var university: String?){
        var email:String = ""
}

আপনার class এর আরো constructor অ্যাড করলে একে বলা হবে, secondary constructors। তখন আপনার constructor কি-ওয়ার্ড ব্যবহার করতে হবে।  secondary constructors যদি primary constructor এর কিছু ব্যবহার করতে চায় তবে এখানে this কি-ওয়ার্ড ব্যবহার করতে হবে।

এখানে আমরা একটি secondary constructor অ্যাড করি এবং email নামে একটি property এর value initialize করি।

class Student (var name: String, var id: Int, var university: String?) {
    var email: String = ""

    constructor(name: String, id: Int, university: String?, email: String) : this(name, id, university) {
        this.email = email
    }
}

এখন আপনি যদি secondary constructor ব্যবহার করে instance তৈরি করতে হলে এভাবে লিখতে হবে-

var sunnat = Student("Sunnat", 11101043, "BRAC University","suncha629@gmail.com")

এখন আমরা দেখি কিভাবে প্রিন্ট করতে পারি। আমরা class এ একটি নতুন ফাংশন নিচ্ছি display নামে, সেখানে আমরা print() বা println() কল করে String টা লিখে দিব আর main() ফাংশনে সেই display() ফাংশনটি কল করব।

class Student (var name: String, var id: Int, var university: String?) {
    var email: String = ""

    constructor(name: String, id: Int, university: String?, email: String) : this(name, id, university) {
        this.email = email
    }

    fun display(){
        println("Name: $name\nID: $id\nEmail: $email\nUniversity: $university")
    }
}

fun main(args: Array) {
    var sunnat = Student("Sunnat", 11101043, "BRAC University","suncha629@gmail.com")
    sunnat.display()
}

 

Inheritance

Kotlin এর Inheritance দেখতে প্রায় Java এর মত। যেমন-

open class Base

class Derived : Base()

এখানে দেখা যাচ্ছে আমরা একটি classopen দিয়ে মেনশোন করা হয়েছে, আর এটি হচ্ছে parent class। এর মানে হচ্ছে parent class কে open দিয়ে মার্ক করা হয়, তবে অনেক সময় final নিয়েও মার্ক করা হয়।
যদি Base class এ constructor থাকে, তবে অবশ্যই Derived class এ কল করতে হবে।

open class Base(param:Int)

class Derived : Base(42)

যদি Derived class এ কোন primary constructor না থাকে তবে এর secondary constructors কে কল করতে হবে সে ক্ষেত্রে আমরা super কল করব।

open class Base(param:Int)

class Derived : Base {
    constructor(param:Int) : super(param)
}

আর একটি open override এর combination এ Method inheritance পরিপূর্ণ হবে।

open class Base {
    open fun baseFunc() {
        println("base")
    }
}

class Derived : Base() {
    override fun baseFunc() {
        println("derived")
    }
}

fun main(args: Array) {
    var derived = Derived()
    derived.baseFunc() // prints "derived"
}

Kotlin এ আরেক ধরনের interface রয়েছে যা কিনা একটু অন্য ধাজের। তা হচ্ছে interface, abstract functions এমনকি implementations এ ধারণ করতে পারে। যেমন-

interface BaseInterface {
    fun a()
    fun b() {print("b");}
};

class implementation : BaseInterface {
    override fun a() { print("a");}
}

fun main(args: Array) {
    var imp = implementation()
    imp.a();
    imp.b();
}

 
আপনারা আরো ডিটেইলস জানলে ভিসিট করুনঃ Classes
 
 

আজ এটুকুই। সামনে আরো কিছু feature দেখব। আর এর পর থেকে আমরা ছোট ছোট কাজ করা শুরু করব। 🙂

Share on Facebook9Tweet about this on TwitterShare on Google+0Share on LinkedIn0Buffer this pageDigg thisEmail this to someoneFlattr the authorPin on Pinterest0Print this pageShare on Reddit0Share on StumbleUpon0Share on Tumblr0Share on VKShare on Yummly0

Comments

comments