sealed class اور sealed interface Kotlin میں محدود قسم کے درجہ بندی کے میکانزم ہیں، جہاں تمام ممکنہ ذیلی طبقات تالیف کے وقت معلوم ہوتے ہیں۔ عام تجریدی طبقات کے برعکس، sealed class when-اظہار میں تمام متغیرات کی مکمل ہینڈلنگ کی ضمانت دیتا ہے۔ JetBrains Kotlin Language Guide (2026) دستاویزات کے مطابق، sealed اقسام Kotlin منصوبوں میں حالات، UI اسکرینوں اور نتیجہ کی اقسام کی ماڈلنگ کی بنیاد ہیں۔
اہم نکات
sealed class ایک تجریدی کلاس ہے جس میں ایک پابندی ہے: اس کے تمام براہ راست ذیلی طبقات اسی فائل میں اعلان کیے جانے چاہئیں جہاں sealed class خود ہے۔ یہ پابندی درجہ بندی کو بند (sealed) بنا دیتی ہے — فائل کے باہر کا کوئی بھی کوڈ نیا ذیلی طبقہ شامل نہیں کر سکتا۔
sealed interface، جو Kotlin 1.5 میں شامل کیا گیا، وہی ضمانت فراہم کرتا ہے لیکن انٹرفیس کی لچک کے ساتھ: ایک sealed interface ایک فائل میں متعدد طبقات، اشیاء یا دیگر انٹرفیسز کے ذریعے نافذ کیا جا سکتا ہے۔ sealed class کے برعکس، sealed interface پر واحد وراثت کی کوئی پابندی نہیں ہے — ایک طبقہ ایک ساتھ متعدد sealed انٹرفیسز کو نافذ کر سکتا ہے۔
Kotlin Evolution and Roadmap (2026) کے مطابق، sealed interface کو زیادہ لچکدار ماڈلنگ کے لیے کمیونٹی کی درخواست پر شامل کیا گیا تھا۔ بنیادی محرک متعدد طبقہ وراثت کے بغیر آزاد قسم کے درجہ بندیوں کو یکجا کرنے کی صلاحیت ہے۔
sealed class کا اعلان class سے پہلے sealed modifier سے شروع ہوتا ہے۔ ذیلی طبقات اسی فائل میں اعلان کیے جاتے ہیں۔
sealed class NetworkResult {
data class Success(val data: String) : NetworkResult()
data class Error(val message: String) : NetworkResult()
object Loading : NetworkResult()
}
sealed class کا ہر ذیلی طبقہ اپنی خصوصیات اور طریقے رکھ سکتا ہے۔ Loading ایک سنگلٹن (object) ہے، Success اور Error پیرامیٹرز کے ساتھ data class ہیں۔ مرتب کنندہ تینوں متغیرات کو جانتا ہے اور when میں استعمال ہونے پر ان کی مکملیت کی جانچ کرتا ہے۔
sealed طبقات نیسٹڈ ہو سکتے ہیں، قسم کی حفاظت کو کھوئے بغیر پیچیدہ ڈیٹا ماڈلز کے لیے کثیر سطحی درجہ بندی تشکیل دیتے ہیں۔
sealed class UiState {
object Idle : UiState()
object Loading : UiState()
data class Content(val items: List<Item>) : UiState()
data class Error(val exception: Throwable) : UiState()
}
sealed interface کو sealed class کی طرح اعلان کیا جاتا ہے، لیکن ایک طبقہ میں متعدد sealed انٹرفیسز کو نافذ کرنے کی اجازت دیتا ہے۔
sealed interface Action
sealed interface Loggable
data class Navigate(val route: String) : Action, Loggable
data class ShowToast(val text: String) : Action
object GoBack : Action, Loggable
Navigate طبقہ ایک ساتھ دو sealed انٹرفیسز — Action اور Loggable — کو نافذ کرتا ہے۔ یہ واحد وراثت کی پابندی کی وجہ سے sealed class کے ساتھ ناممکن ہے۔ sealed interface آزاد درجہ بندیوں کو یکجا کرنے کی لچک فراہم کرتا ہے۔
sealed interface اس وقت ترجیحی ہے جب درجہ بندی کو مشترکہ حالت یا تعمیر کنندہ کی ضرورت نہیں ہوتی۔ JetBrains Kotlin Guidelines (2026) کے مطابق، تمام نئی درجہ بندیوں کے لیے جہاں مشترکہ تعمیر کنندہ کی ضرورت نہیں، ڈیفالٹ طور پر sealed interface استعمال کیا جانا چاہیے، جو مستقبل میں توسیع کے لیے کوڈ کو زیادہ لچکدار بناتا ہے۔
sealed اقسام کا بنیادی فائدہ when-اظہار میں مکمل (exhaustive) ہینڈلنگ ہے۔ مرتب کنندہ جانچ کرتا ہے کہ تمام ممکنہ ذیلی طبقات شامل ہیں۔
fun handleResult(result: NetworkResult): String = when (result) {
is NetworkResult.Success -> "Data: ${result.data}"
is NetworkResult.Error -> "Error: ${result.message}"
is NetworkResult.Loading -> "Loading..."
// else کی ضرورت نہیں — مرتب کنندہ جانتا ہے کہ تمام متغیرات کور ہیں
}
اگر کوئی ڈویلپر sealed درجہ بندی میں نیا ذیلی طبقہ شامل کرتا ہے لیکن اسے when میں ہینڈل کرنا بھول جاتا ہے — تو مرتب کنندہ خرابی دے گا۔ یہ قسم کی سطح پر حفاظت ہے، جو else-شاخ استعمال کرنے والی کھلی درجہ بندیوں میں دستیاب نہیں ہے۔
Google Android Developers (2026) کے مطابق، sealed طبقات Jetpack Compose میں UI حالت کو ماڈل کرنے کا تجویز کردہ طریقہ ہیں۔ when کی مکمل جانچ ان حالات کو روکتی ہے جہاں ڈویلپر نے اسکرین کے تمام ممکنہ ڈسپلے متغیرات کو ہینڈل نہیں کیا ہے۔
enum class اور sealed class اکثر الجھائے جاتے ہیں، لیکن ان کے مختلف مقاصد اور صلاحیتیں ہیں۔
| خصوصیت | sealed class | enum class |
|---|---|---|
| مثالیں | متعدد (data class)، ایک (object) | فی مستقل بالکل ایک |
| خصوصیات | ہر ذیلی طبقہ کے لیے مختلف | تمام مستقلات کے لیے یکساں |
| وراثت | ہاں (sealed class سے) | نہیں (ضمنی final) |
| تعمیر کنندہ | پیرامیٹرز رکھ سکتا ہے | صرف تمام مستقلات کے لیے مشترکہ |
| درجہ بندی | محدود، sealed | مستقلات کا مقررہ مجموعہ |
sealed class اور enum class کے درمیان انتخاب کام پر منحصر ہے۔ اگر متغیرات اضافی ڈیٹا نہیں رکھتے — enum استعمال کریں۔ اگر ہر متغیر میں منفرد فیلڈز ہیں — sealed class یا sealed interface استعمال کریں۔
sealed اقسام Kotlin منصوبوں میں متعدد معیاری منظرناموں کے لیے استعمال ہوتی ہیں جہاں قسم کے لحاظ سے محفوظ ماڈلنگ کی ضرورت ہوتی ہے۔
ہر Compose اسکرین ایک sealed class UiState رکھ سکتی ہے جو تمام ممکنہ حالات بیان کرتی ہے: Idle، Loading، Content(data)، Error(exception)۔ when اظہار اس بات کی ضمانت دیتا ہے کہ تمام حالات ہینڈل کیے گئے ہیں۔
NetworkResult Success، Error، Loading متغیرات کے ساتھ Retrofit اور Ktor استعمال کرنے والے Kotlin منصوبوں میں ایک معیاری نمونہ ہے۔ sealed class ہر درخواست کے نتیجے کی محفوظ ہینڈلنگ کو یقینی بناتا ہے۔
sealed interface نیویگیشن راستوں کے لیے ماڈیولز کو ایک متحد درجہ بندی کے اندر رہتے ہوئے اپنے راستوں کا اعلان کرنے کی اجازت دیتا ہے۔ یہ تالیف کے وقت نامعلوم راستوں کی خرابیوں کو ختم کرتا ہے۔
KotlinConf (2025) کے مطابق، sealed class اور sealed interface جدید Kotlin ایپلیکیشنز میں قسم کے لحاظ سے محفوظ ڈیزائن کی بنیاد ہیں۔ یہ data class کے ساتھ مل کر تالیف کے وقت حفاظت کو کھوئے بغیر پیچیدہ ڈومین ڈھانچوں کی ماڈلنگ کرتے ہیں۔
اکثر پوچھے گئے سوالات
sealed class کے تمام براہ راست ذیلی طبقات اسی فائل میں اعلان کیے جانے چاہئیں۔ sealed interface کے لیے بھی یہی قاعدہ ہے — نفاذ ایک فائل میں۔
نہیں، ایک فائل کا قاعدہ sealed interface پر بھی لاگو ہوتا ہے۔ تمام نفاذ اس فائل میں ہونے چاہئیں جہاں sealed interface کا اعلان کیا گیا ہے۔
sealed interface میں کوئی حالت یا تعمیر کنندہ نہیں ہوتا اور یہ متعدد نفاذ کی اجازت دیتا ہے۔ sealed class میں تعمیر کنندہ اور مشترکہ حالت ہو سکتی ہے، لیکن ایک طبقہ صرف ایک sealed class سے وراثت حاصل کر سکتا ہے۔
مرتب کنندہ when کی مکملیت کی جانچ کرتا ہے: اگر تمام ذیلی طبقات ہینڈل نہیں کیے گئے، کوڈ مرتب نہیں ہوتا۔ یہ رن ٹائم خرابیوں کو ختم کرتا ہے اور کوڈ کو محفوظ بناتا ہے۔
ہاں، ایک sealed class میں تعمیر کنندہ ہو سکتا ہے (ڈیفالٹ طور پر private)۔ تمام ذیلی طبقات super() کے ذریعے اس تعمیر کنندہ میں پیرامیٹرز منتقل کر سکتے ہیں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں