Kotlin এর মৌলিক সিনট্যাক্স
কটলিন শেখা শুরু করার আগে এর মৌলিক সিনট্যাক্স সম্পর্কে ভালো ধারণা থাকা প্রয়োজন। এতে কটলিনের বেসিক ধারণা এবং বিভিন্ন ফিচার সম্পর্কে পরিষ্কার ধারণা পাবেন। নিচে কটলিনের কয়েকটি গুরুত্বপূর্ণ মৌলিক সিনট্যাক্স নিয়ে আলোচনা করা হলো:
১. ফাংশন ডিক্লারেশন
কটলিনে ফাংশন ডিক্লারেশন খুবই সহজ। আপনি fun কীওয়ার্ড ব্যবহার করে একটি ফাংশন ডিক্লেয়ার করতে পারেন।
উদাহরণ:
fun greet(name: String): String {
return "Hello, $name!"
}
ব্যাখ্যা:
fun: ফাংশন ডিক্লেয়ার করার কীওয়ার্ড।greet(name: String): এটি হলো ফাংশনের নাম এবং প্যারামিটার। এখানেnameহলো একটিStringটাইপের প্যারামিটার।: String: ফাংশনটিStringরিটার্ন করবে।return: ফাংশনের রিটার্ন স্টেটমেন্ট।
২. ভ্যারিয়েবল ডিক্লারেশন
কটলিনে দুই ধরনের ভ্যারিয়েবল আছে: val এবং var।
val: এটি একটি ইম্যুটেবল ভ্যারিয়েবল (যার মান একবার সেট করার পর পরিবর্তন করা যায় না)।var: এটি একটি মিউটেবল ভ্যারিয়েবল (যার মান পরিবর্তন করা যায়)।
উদাহরণ:
val name = "John" // মান পরিবর্তন করা যাবে না
var age = 25 // মান পরিবর্তন করা যাবে
ব্যাখ্যা:
val name = "John": এখানেnameভ্যারিয়েবলটি ইম্যুটেবল, মান পরিবর্তন করা যাবে না।var age = 25: এখানেageভ্যারিয়েবলটি মিউটেবল, মান পরিবর্তন করা যাবে।
৩. ডাটা টাইপ
কটলিনে বিভিন্ন ডাটা টাইপ রয়েছে যেমন:
- Numbers:
Int,Double,Float,Long,Short,Byte - Characters:
Char - Boolean:
Boolean - Strings:
String
উদাহরণ:
val age: Int = 25
val pi: Double = 3.14159
val isStudent: Boolean = true
val grade: Char = 'A'
৪. স্ট্রিং টেমপ্লেট
কটলিনে স্ট্রিং-এর ভেতরে ভ্যারিয়েবল বা এক্সপ্রেশন ব্যবহার করতে $ সিম্বল ব্যবহার করা হয়।
উদাহরণ:
val name = "Alice"
val message = "Hello, $name!"
println(message) // আউটপুট: Hello, Alice!
৫. শর্তাধীন স্টেটমেন্ট (if-else)
কটলিনে if-else স্টেটমেন্টটি অন্যান্য ভাষার মতোই কাজ করে।
উদাহরণ:
val number = 10
if (number > 0) {
println("Positive")
} else if (number < 0) {
println("Negative")
} else {
println("Zero")
}
৬. when স্টেটমেন্ট (সুইচ-এর বিকল্প)
কটলিনে when হলো switch-এর সমতুল্য এবং এটি আরও শক্তিশালী।
উদাহরণ:
val day = 3
val dayName = when (day) {
1 -> "Monday"
2 -> "Tuesday"
3 -> "Wednesday"
4 -> "Thursday"
5 -> "Friday"
6 -> "Saturday"
7 -> "Sunday"
else -> "Invalid day"
}
println(dayName) // আউটপুট: Wednesday
৭. লুপ (for এবং while)
কটলিনে for এবং while লুপ ব্যবহার করা হয় রিপিটেশন এবং আইটেম ইটারেট করার জন্য।
for লুপ উদাহরণ:
for (i in 1..5) {
println(i) // 1 থেকে ৫ পর্যন্ত প্রিন্ট করবে
}
while লুপ উদাহরণ:
var i = 1
while (i <= 5) {
println(i)
i++
}
৮. ক্লাস ডিক্লারেশন
কটলিনে ক্লাস ডিক্লারেশন খুব সহজ এবং কোড অনেকটাই সংক্ষিপ্ত থাকে।
উদাহরণ:
class Person(val name: String, var age: Int) {
fun display() {
println("Name: $name, Age: $age")
}
}
val person = Person("John", 30)
person.display() // আউটপুট: Name: John, Age: 30
উপসংহার
কটলিনের মৌলিক সিনট্যাক্স অনেকটাই সোজা এবং সহজবোধ্য। এটি সংক্ষিপ্ত এবং মডার্ন প্রোগ্রামিং ফিচারগুলো সমর্থন করে, যা ডেভেলপারদের কাজকে সহজ করে। কটলিনের মূল সিনট্যাক্স সম্পর্কে ভালো ধারণা থাকলে, আরও উন্নত ফিচারগুলো শেখা এবং প্রয়োগ করা সহজ হবে।
কটলিনে ভ্যারিয়েবল এবং ডাটা টাইপ নিয়ে আলোচনা করছি। কটলিনে ভ্যারিয়েবল ডিক্লেয়ার করার এবং ডাটা টাইপ ব্যবহারের পদ্ধতি অনেকটা সহজ এবং সুবিধাজনক। চলুন, প্রতিটি অংশ বিস্তারিতভাবে দেখি:
ভ্যারিয়েবল ডিক্লেয়ারেশন
কটলিনে দুই ধরনের ভ্যারিয়েবল রয়েছে: mutable (পরিবর্তনশীল) এবং immutable (অপরিবর্তনীয়)।
- Mutable Variable (পরিবর্তনশীল ভ্যারিয়েবল):
- কটলিনে পরিবর্তনশীল ভ্যারিয়েবল ডিক্লেয়ার করতে
varকীওয়ার্ড ব্যবহার করা হয়। - এ ধরনের ভ্যারিয়েবলের মান পরিবর্তন করা যায়।
- উদাহরণ:
- কটলিনে পরিবর্তনশীল ভ্যারিয়েবল ডিক্লেয়ার করতে
var name = "John"
name = "Doe" // মান পরিবর্তন করা সম্ভব
- Immutable Variable (অপরিবর্তনীয় ভ্যারিয়েবল):
- কটলিনে অপরিবর্তনীয় ভ্যারিয়েবল ডিক্লেয়ার করতে
valকীওয়ার্ড ব্যবহার করা হয়। - একবার ভ্যালু সেট করার পর এটি পরিবর্তন করা যায় না।
- উদাহরণ:
- কটলিনে অপরিবর্তনীয় ভ্যারিয়েবল ডিক্লেয়ার করতে
val age = 25
// age = 30 // এই লাইনটি ত্রুটি দেবে কারণ এটি অপরিবর্তনীয়
ডাটা টাইপসমূহ
কটলিনে বিভিন্ন ধরনের প্রিমিটিভ ও রেফারেন্স টাইপ রয়েছে। নিচে কয়েকটি গুরুত্বপূর্ণ ডাটা টাইপের তালিকা দেওয়া হলো:
Number Types (সংখ্যা টাইপ):
Byte: 8-bit integer (e.g.,val byteVal: Byte = 10)Short: 16-bit integer (e.g.,val shortVal: Short = 100)Int: 32-bit integer (e.g.,val intVal: Int = 1000)Long: 64-bit integer (e.g.,val longVal: Long = 10000L)Float: 32-bit floating point number (e.g.,val floatVal: Float = 3.14F)Double: 64-bit floating point number (e.g.,val doubleVal: Double = 3.1415)
Character Type (অক্ষর টাইপ):
Char: একটি একক অক্ষর ধারণ করতে ব্যবহার হয়। (e.g.,val letter: Char = 'A')
Boolean Type (বুলিয়ান টাইপ):
Boolean: এটি দুটি মান ধারণ করতে পারে:trueঅথবাfalse। (e.g.,val isActive: Boolean = true)
String Type (স্ট্রিং টাইপ):
String: এটি টেক্সট বা অক্ষরের সমষ্টি ধারণ করে। (e.g.,val message: String = "Hello, Kotlin!")- মাল্টি-লাইন স্ট্রিং:
val multiLineString = """
This is a
multi-line string
"""
টাইপ ইনফারেন্স
কটলিনে টাইপ ইনফারেন্সের সুবিধা রয়েছে, অর্থাৎ ভ্যারিয়েবলের টাইপ স্পষ্টভাবে উল্লেখ না করলেও কটলিন নিজে থেকে টাইপ বুঝে নিতে পারে। উদাহরণ:
val name = "Kotlin" // এটি স্বয়ংক্রিয়ভাবে String হিসেবে চিহ্নিত হবে
val age = 25 // এটি স্বয়ংক্রিয়ভাবে Int হিসেবে চিহ্নিত হবে
Nullable Types (নালেবল টাইপ)
কটলিনে ভ্যারিয়েবল ডিফল্টভাবে নাল (null) হতে পারে না। যদি কোনো ভ্যারিয়েবলকে নাল হতে দিতে হয়, তাহলে টাইপের পাশে ? যোগ করতে হবে। উদাহরণ:
var nullableName: String? = null
nullableName = "John"
ডাটা টাইপ পরিবর্তন (Type Conversion)
কটলিনে সরাসরি এক ধরনের ডাটা টাইপ থেকে অন্য ধরনের ডাটা টাইপে কনভার্ট করা যায় না। এজন্য toType() ফাংশনগুলো ব্যবহার করতে হয়।
- উদাহরণ:
val number: Int = 100
val convertedNumber: Double = number.toDouble()
উপসংহার
কটলিনে ভ্যারিয়েবল এবং ডাটা টাইপের ব্যবহারের পদ্ধতি খুবই সহজ ও সরল। কটলিনে mutable (var) এবং immutable (val) ভ্যারিয়েবল ব্যবহার করে আপনি আপনার কোডে পরিবর্তনশীলতা এবং স্থায়ীত্ব বজায় রাখতে পারেন। এছাড়াও, কটলিনের ডাটা টাইপসমূহ যেমন সংখ্যা, বুলিয়ান, স্ট্রিং এবং চর, প্রোগ্রামিংয়ের বেসিক কাঠামো গঠনে গুরুত্বপূর্ণ ভূমিকা পালন করে।
কটলিনের টাইপ ইনফারেন্স এবং nullable টাইপের সুবিধা প্রোগ্রামিংকে আরও বেশি নিরাপদ এবং সহজ করে তোলে, কারণ এগুলো ডাটা টাইপ নিয়ে ত্রুটি কমাতে সহায়ক। পাশাপাশি টাইপ কনভার্শনের জন্য কটলিনের বিল্ট-ইন ফাংশনগুলো ডাটা ম্যানিপুলেশনকে আরও সহজ করে তোলে।
Kotlin-এ mutable এবং immutable ভেরিয়েবল ডিফাইন করার জন্য দুটি কিওয়ার্ড ব্যবহার করা হয়: var এবং val। এদের মাধ্যমে আপনি ভেরিয়েবলের মান পরিবর্তন করতে পারবেন কিনা সেটি নির্ধারণ করা হয়। নিচে আমি বিস্তারিতভাবে var এবং val নিয়ে আলোচনা করছি:
১. Mutable Variables (var)
- Mutable মানে হলো পরিবর্তনশীল। অর্থাৎ,
varদিয়ে ঘোষিত ভেরিয়েবলের মান পরিবর্তন করা যায়। - আপনি যখন একটি ভেরিয়েবলকে
varদিয়ে ডিফাইন করবেন, তখন পরে কোডে সেটির মান পরিবর্তন করা সম্ভব।
উদাহরণ:
var name = "Rahim"
println(name) // আউটপুট: Rahim
// ভেরিয়েবলের মান পরিবর্তন করা হচ্ছে
name = "Karim"
println(name) // আউটপুট: Karim
- উপরের উদাহরণে, প্রথমে
"Rahim"মান দেওয়া হয়েছে, তারপর"Karim"মান দিয়ে সেটি পরিবর্তন করা হয়েছে। এটাইvarএর বিশেষত্ব।
২. Immutable Variables (val)
- Immutable মানে অপরিবর্তনীয়। অর্থাৎ,
valদিয়ে ঘোষিত ভেরিয়েবলের মান পরিবর্তন করা যায় না। - একবার মান সেট করার পর, এটি পুনরায় পরিবর্তন করা সম্ভব নয়। এটি অনেকটা final ভেরিয়েবলের মতো কাজ করে।
উদাহরণ:
val country = "Bangladesh"
println(country) // আউটপুট: Bangladesh
// ভেরিয়েবলের মান পরিবর্তন করার চেষ্টা করলে এরর হবে
// country = "India" // এটি কমেন্ট করা হয়েছে কারণ এটি একটি কম্পাইল টাইম এরর দেবে
- উপরের উদাহরণে,
countryভেরিয়েবলটিvalদিয়ে ডিফাইন করা হয়েছে। একবার সেট করলে এটি পরিবর্তন করা যাবে না। যদি পরিবর্তন করার চেষ্টা করা হয়, তাহলে কম্পাইল টাইমে এরর দেখা দেবে।
var এবং val এর ব্যবহার:
var: যখন আপনি জানেন যে ভেরিয়েবলের মান পরিবর্তিত হতে পারে বা পরিবর্তন করতে হবে, তখনvarব্যবহার করা উচিত।val: যখন আপনি নিশ্চিত যে ভেরিয়েবলের মান একবার সেট করার পর পরিবর্তিত হবে না, তখনvalব্যবহার করা উচিত। এটি কোডের নিরাপত্তা এবং রিড-অনলি ভেরিয়েবল ডিফাইন করতে সহায়তা করে।
সংক্ষেপে পার্থক্য:
| বৈশিষ্ট্য | var | val |
|---|---|---|
| পরিবর্তনশীল | হ্যাঁ | না |
| ব্যবহারের ক্ষেত্র | মান পরিবর্তনযোগ্য হলে | মান অপরিবর্তনীয় হলে |
উদাহরণ:
fun main() {
var age = 25 // পরিবর্তনশীল ভেরিয়েবল
val birthYear = 1998 // অপরিবর্তনীয় ভেরিয়েবল
age = 26 // এটি কাজ করবে, কারণ `age` একটি mutable ভেরিয়েবল
// birthYear = 2000 // এটি এরর দেবে, কারণ `birthYear` একটি immutable ভেরিয়েবল
}
কোথায় var এবং val ব্যবহার করবেন?
- কাউন্টার বা লুপ ভেরিয়েবল হিসেবে
varব্যবহার করা যেতে পারে, কারণ তাদের মান পরিবর্তিত হয়। - কনফিগারেশন, রিড-অনলি ডেটা বা কনস্ট্যান্ট ভ্যালু (যা প্রোগ্রামের সময়কাল ধরে অপরিবর্তিত থাকে) সেট করতে
valব্যবহার করা হয়।
আশা করি var এবং val এর মধ্যে পার্থক্য এবং এদের ব্যবহার নিয়ে ধারণা পরিষ্কার হয়েছে। যদি আপনার আরও কোনো প্রশ্ন থাকে বা অন্য কোনো টপিক নিয়ে জানতে চান, আমাকে জানাবেন!
উপসংহার
Kotlin-এ ভেরিয়েবল ডিক্লেয়ার করার ক্ষেত্রে var এবং val একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। var ব্যবহার করা হয় যখন ভেরিয়েবলের মান পরিবর্তনযোগ্য হতে পারে, এবং এটি আপনাকে কোডে ফ্লেক্সিবিলিটি দেয়। অন্যদিকে, val ব্যবহার করা হয় যখন ভেরিয়েবলের মান একবার সেট করার পর অপরিবর্তনীয় থাকে, যা কোডের নিরাপত্তা নিশ্চিত করে এবং ভুল কমানোর ক্ষেত্রে সাহায্য করে। সঠিকভাবে var এবং val ব্যবহার করলে কোডের কার্যকারিতা
Comments এবং Code Structure
কটলিনে কোড লেখার সময় comments এবং সঠিক code structure ব্যবহার করা অত্যন্ত গুরুত্বপূর্ণ, কারণ এগুলো কোডের রিডেবিলিটি এবং মেইনটেইনেবিলিটি বাড়ায়। নিচে কটলিনে comments এবং code structure নিয়ে বিস্তারিত আলোচনা করা হলো:
১. Comments
কটলিনে comments হলো এমন অংশ যেখানে কোড এক্সিকিউট হয় না। এটি মূলত কোডের বিভিন্ন অংশের ব্যাখ্যা বা ডকুমেন্টেশন করার জন্য ব্যবহৃত হয়। কটলিনে দুটি ধরনের comment আছে:
i) Single-line Comment
একটি লাইন কমেন্ট করার জন্য // ব্যবহার করা হয়।
উদাহরণ:
// এটি একটি সিঙ্গেল-লাইন কমেন্ট
val name = "Alice" // এখানে আমরা একটি নাম সেট করেছি
ii) Multi-line Comment
একাধিক লাইন কমেন্ট করার জন্য /* ... */ ব্যবহার করা হয়।
উদাহরণ:
/*
এটি একটি মাল্টি-লাইন কমেন্ট।
এখানে আমরা একাধিক লাইন ব্যবহার করে
কোডের ব্যাখ্যা দিতে পারি।
*/
val age = 25
iii) Documentation Comment
কোনো ফাংশন, ক্লাস, বা মেথডের ডকুমেন্টেশন করার জন্য /** ... */ ফরম্যাট ব্যবহার করা হয়। এটি সাধারণত API ডকুমেন্টেশন তৈরি করতে সহায়তা করে।
উদাহরণ:
/**
* এটি একটি greet ফাংশন যা একটি নাম গ্রহণ করে এবং একটি
* শুভেচ্ছা বার্তা রিটার্ন করে।
*
* @param name নাম যার সাথে শুভেচ্ছা জানানো হবে
* @return শুভেচ্ছা বার্তা
*/
fun greet(name: String): String {
return "Hello, $name!"
}
২. Code Structure
কটলিনের কোড structure সিম্পল এবং ক্লিন রাখার জন্য নীচের গাইডলাইনগুলো অনুসরণ করা যেতে পারে:
i) Package Declaration
প্রত্যেক কটলিন ফাইলের শুরুর দিকে একটি প্যাকেজ ডিক্লারেশন থাকতে পারে, যা কোডকে সংগঠিত রাখে।
উদাহরণ:
package com.example.myapp
ii) Import Statements
যদি আপনি অন্য প্যাকেজের ক্লাস বা ফাংশন ব্যবহার করতে চান, তাহলে import স্টেটমেন্ট ব্যবহার করবেন।
উদাহরণ:
import java.util.Scanner
iii) Main Function
প্রতিটি কটলিন প্রোগ্রামে একটি main ফাংশন থাকে, যেখান থেকে প্রোগ্রাম এক্সিকিউশন শুরু হয়।
উদাহরণ:
fun main() {
println("Hello, Kotlin!")
}
iv) Class and Function Structure
কটলিনে কোড মেইনটেইনেবল রাখতে ক্লাস এবং ফাংশনগুলো সঠিকভাবে গঠন করা গুরুত্বপূর্ণ। ক্লাসের ভেতরে প্রোপার্টিজ এবং মেথডগুলো সংক্ষিপ্ত এবং গঠনমূলক হওয়া উচিত।
ক্লাস উদাহরণ:
class Person(val name: String, var age: Int) {
fun greet() {
println("Hello, my name is $name and I am $age years old.")
}
}
v) Indentation এবং Code Formatting
কোডে প্রপার ইনডেন্টেশন এবং ফরম্যাটিং ব্যবহার করা উচিত যাতে কোডটি সহজে বোঝা যায়। IntelliJ IDEA এবং অন্যান্য IDE-তে এটির জন্য বিল্ট-ইন ফরম্যাটার রয়েছে।
- কোড ব্লকগুলোর জন্য সাধারণত ৪ স্পেস ইনডেন্টেশন ব্যবহার করা হয়।
- সেমিকোলন (
;) সাধারণত প্রয়োজন হয় না, কারণ কটলিনে এটি ঐচ্ছিক।
৩. কটলিনের ফাইল স্ট্রাকচার
একটি কটলিন প্রোগ্রামের সাধারণ ফাইল স্ট্রাকচার নিচের মতো হতে পারে:
package com.example.myapp
import java.util.Scanner
// ক্লাস ডিক্লারেশন
class Calculator {
fun add(a: Int, b: Int): Int {
return a + b
}
}
// মেইন ফাংশন
fun main() {
val calculator = Calculator()
val result = calculator.add(5, 10)
println("The sum is: $result")
}
উপসংহার
কটলিনে comments ব্যবহার করা এবং সঠিক code structure মেইনটেইন করা একটি ভালো প্র্যাকটিস, যা কোডকে আরও রিডেবল এবং মেইনটেইনেবল করে তোলে। comments কোডের ব্যাখ্যা দিতে সাহায্য করে, আর সঠিক structure কোডের লজিক্যাল ফ্লো বুঝতে সহায়তা করে। আপনি যদি কোড রিডেবিলিটি এবং মেইনটেইনেবিলিটি বাড়াতে চান, তাহলে comments এবং proper code structure অবশ্যই অনুসরণ করা উচিত।
কটলিনে Type Inference এবং Type Checking প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ দিক। এগুলো কোডকে আরও সংক্ষিপ্ত ও নিরাপদ করে তুলতে সাহায্য করে। নিচে আমি প্রতিটি অংশ বিস্তারিতভাবে ব্যাখ্যা করছি:
Type Inference
কটলিনে Type Inference হলো এমন একটি প্রক্রিয়া যেখানে কম্পাইলার স্বয়ংক্রিয়ভাবে ভ্যারিয়েবলের টাইপ নির্ধারণ করে, যখন ভ্যারিয়েবলটি ডিক্লেয়ার করা হয়। এর ফলে আপনাকে প্রতিটি ভ্যারিয়েবলের টাইপ স্পষ্টভাবে উল্লেখ করতে হয় না। এটি কোডকে সংক্ষিপ্ত ও পড়তে সহজ করে তোলে।
উদাহরণ:
val age = 25 // Int টাইপ হিসেবে নির্ধারিত
val name = "Kotlin" // String টাইপ হিসেবে নির্ধারিত
val isActive = true // Boolean টাইপ হিসেবে নির্ধারিত
এখানে, age একটি Int টাইপ, name একটি String টাইপ, এবং isActive একটি Boolean টাইপ হিসেবে স্বয়ংক্রিয়ভাবে নির্ধারিত হয়েছে। কটলিন কম্পাইলার এগুলো নিজে থেকে নির্ধারণ করে নেয়।
Type Checking
কটলিনে Type Checking হলো এমন একটি প্রক্রিয়া যেখানে কম্পাইলার রানটাইম বা কম্পাইল টাইমে নিশ্চিত করে যে প্রতিটি ভ্যারিয়েবলের টাইপ সঠিকভাবে ব্যবহার করা হচ্ছে কি না। এটি টাইপ-সেফটি নিশ্চিত করে, অর্থাৎ ভ্যারিয়েবলগুলো নির্দিষ্ট টাইপের ডাটা ছাড়া অন্য কিছু ধারণ করতে পারবে না।
উদাহরণ:
val number: Int = 10
// number = "text" // ত্রুটি দেখাবে, কারণ `number` হলো `Int` টাইপ, কিন্তু `"text"` হলো `String`
এখানে, number ভ্যারিয়েবলটি Int টাইপের জন্য ডিক্লেয়ার করা হয়েছে। যদি আপনি এটিকে অন্য টাইপের মান দিয়ে সেট করার চেষ্টা করেন, তাহলে কটলিন কম্পাইলার ত্রুটি দেবে।
টাইপ চেকিং এবং স্মার্ট কাস্ট (Smart Cast)
কটলিনে টাইপ চেকিংয়ের সাথে Smart Cast ব্যবহার করা যায়, যা ভ্যারিয়েবলের টাইপ চেক করার পর সেই টাইপে অটোমেটিক্যালি কাস্ট (convert) করতে সাহায্য করে। is কীওয়ার্ড ব্যবহার করে এটি করা হয়।
উদাহরণ:
fun checkType(obj: Any) {
if (obj is String) {
// obj স্বয়ংক্রিয়ভাবে String হিসেবে কাস্ট হয়ে গেছে
println("Length of the string: ${obj.length}")
}
}
উপরের উদাহরণে, obj ভ্যারিয়েবলটি যদি String টাইপের হয়, তাহলে কটলিন এটি String হিসেবে কাস্ট করে এবং আপনি String-এর প্রপার্টি ও মেথডগুলো (যেমন, .length) সরাসরি অ্যাক্সেস করতে পারবেন।
টাইপ কাস্টিং (Type Casting)
কখনও কখনও আপনাকে টাইপ ম্যানুয়ালি কাস্ট করতে হতে পারে। কটলিনে এটি করার জন্য as অপারেটর ব্যবহার করা হয়।
উদাহরণ:
val obj: Any = "Kotlin"
val str: String = obj as String
println(str.length)
এখানে, obj ভ্যারিয়েবলটি Any টাইপের হলেও, আমরা এটি ম্যানুয়ালি String-এ কাস্ট করেছি। তবে, যদি কাস্টিং ব্যর্থ হয়, তাহলে এটি একটি ClassCastException ছুঁড়বে।
Safe Cast (নিরাপদ কাস্টিং)
যদি কাস্টিং করার সময় একটি ত্রুটি এড়াতে চান, তাহলে as? অপারেটর ব্যবহার করতে পারেন। এটি যদি কাস্টিং ব্যর্থ হয়, তাহলে null রিটার্ন করে।
উদাহরণ:
val obj: Any = 123
val str: String? = obj as? String // এটি কাস্ট হবে না, তাই `str` হবে `null`
এখানে, obj একটি Int টাইপের ভ্যালু ধারণ করছে। আমরা এটিকে String-এ কাস্ট করতে চেষ্টা করেছি, কিন্তু as? অপারেটর ব্যবহারের কারণে এটি null রিটার্ন করবে, এবং ClassCastException এরর হবে না।
উপসংহার
কটলিনে Type Inference কোডকে সংক্ষিপ্ত ও সহজপাঠ্য করে তোলে, যেখানে Type Checking টাইপ-সেফটি নিশ্চিত করে। Smart Cast এবং Safe Cast ব্যবহার করে কাস্টিং আরও সহজ এবং নিরাপদ করা যায়। কটলিনের টাইপ সিস্টেম ডেভেলপারদের ভুল কমানোর পাশাপাশি একটি সুরক্ষিত এবং রোবাস্ট প্রোগ্রাম তৈরিতে সাহায্য করে।
Read more