<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Hesam</title>
        <link>https://virgool.io/feed/@hharddy228</link>
        <description>Developer</description>
        <language>fa</language>
        <pubDate>2026-06-10 12:32:13</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/2859954/avatar/zeObxF.png?height=120&amp;width=120</url>
            <title>Hesam</title>
            <link>https://virgool.io/@hharddy228</link>
        </image>

                    <item>
                <title>متد Factory  در برنامه نویسی چیست</title>
                <link>https://virgool.io/@hharddy228/%D9%85%D8%AA%D8%AF-factory-%D8%AF%D8%B1-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%DA%86%DB%8C%D8%B3%D8%AA-tg5mohrj7ir3</link>
                <description>این روش تضمین می‌کند که همه اشیایی که ایجاد می‌کند با یک رابط مشترک مطابقت دارند، بنابراین می‌توانید بدون نگرانی از جزئیات پیاده‌سازی، با آنها کار کنید.یکی از کاربردهای واضح الگوی روش Factory در یک برنامه فلاتر، تولید عناصر رابط کاربری با استایل بومی برای پلتفرم‌های مختلفه.در این مثال، یه کارخانه دکمه‌ساز هوشمند پلتفرمی می‌سازیم که دکمه‌های مناسب برای اندروید یا iOS را تحویل میدهد.abstract class PlatformButton {  factory PlatformButton(TargetPlatform platform) {    switch (platform) {      case TargetPlatform.android: return AndroidButton();      case TargetPlatform.iOS: return IosButton();      default: return null;    }  }   Widget build({    @required BuildContext context,    @required Widget child,    @required VoidCallback onPressed  });}برای دسترسی به ویجت‌های ElevatedButton با طراحی متریال و ویجت‌های CupertinoButton با استایل iOS، ابتدا کتابخانه‌های مناسب فلاتر ایمپورت می‌کنیم.درست همانند مثال اشکال از بخش قبلی، یه کلاس انتزاعی برای قرار دادن متد کارخانه ایجاد می‌کنیم.constructor کارخانه‌ای PlatformButton، بر اساس مقدار پارامتر platform، یه نمونه از کلاسی که PlatformButton رو پیاده‌سازی می‌کنه، برمی‌گردونه.TargetPlatform یک enum هست که توسط فریم‌ورک Flutter ارائه شده و برای هر کدوم از پلتفرم‌های پشتیبانی‌شده فلاتر مقادیری داره.بخش switch اینجا وظیفه داره که یه نمونه دکمه مطابق با ترجیح کاربر برگردونه. توجه داشته باشین که AndroidButton و IosButton هنوز ایجاد نشدن، اما نگران نباشین، به زودی می‌رسیم بهشون.PlatformButton همچنین یه اعلان پیاده‌سازی‌ نشده برای متد build() داره تا انتظار ایجاد کنه که پیاده‌کننده‌ها اون رو با یه signature سازگار override می‌کنند.متد build() پارامترهایی رو می‌گیره که توسط ویجت‌های دکمه خاص پلتفرم مورد نیاز هستند.class AndroidButton implements PlatformButton {  @override  Widget build({    @required BuildContext context,    @required Widget child,    @required VoidCallback onPressed  }) {    return ElevatedButton(      child: child,      onPressed: onPressed,    );  }} class IosButton implements PlatformButton {  @override  Widget build({    @required BuildContext context,    @required Widget child,    @required VoidCallback onPressed  }) {    return CupertinoButton(      child: child,      onPressed: onPressed,    );  }}منبع: الگوی طراحی Factory در برنامه نویسی چیست + مثال عملی در فلاتر</description>
                <category>Hesam</category>
                <author>Hesam</author>
                <pubDate>Fri, 19 Jan 2024 11:13:00 +0330</pubDate>
            </item>
                    <item>
                <title>بررسی Memory leak در فلاتر</title>
                <link>https://virgool.io/@hharddy228/%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-memory-leak-%D8%AF%D8%B1-%D9%81%D9%84%D8%A7%D8%AA%D8%B1-utoqjnfgwd6g</link>
                <description>نشت حافظه به وضعیتی گفته می شود که یک شیء در حافظه باقی می ماند، حتی اگر دیگر مورد نیاز نباشد.به بیان دیگر مشکل نشت حافظه در فلاتر مواقعی میتواند رخ دهد که نگهداری مقادیر زیادی اطلاعات در حافظه باعث مصرف بیش اندازه آن میشود.در فلاتر، ماشین مجازی زبان دارت VM مدیریت حافظه را بر عهده دارد و از یک garbage collector برای بازیابی خودکار حافظه استفاده نشده استفاده می‌کند.با این حال، اگر اشیا به طور کافی از حافظه آزاد نشوند، ممکن است نشت حافظه رخ دهد که منجر به ماندگاری آنها در Heap و مصرف منابع غیر ضروری می‌شود.این اتفاقات میتواند نتیجه نگهداری غیر اصولی اطلاعات کش, حذف اطلاعات به شکل نامناسب از حافظه, بی توجهی به پاک کردن Listenerها و موارد دیگر باشد.مدیریت نادرست استریم ها و رویدادهای asynchronous در صورتی که subscriptions یک استریم به درستی بسته نشود در پس زمینه به حیات خود ادامه میدهد و باعث نشت حافظه میشود.مورد دیگر که میتواند در این قضیه تاثیر داشته باشد استفاده از تصاویر و فایل های ویدیویی با حجم بالا بدون آزاد سازی صحیح حافظه میباشد.برای جلوگیری از وقوع این اتفاق شما به عنوان برنامه نویس فلاتر و توسعه دهنده اپلیکیشن مجموعه اقداماتی را میتوانید انجام دهید.حذف صحیح اشیاهمواره اشیا را زمانی که دیگر مورد نیاز نیستند با استفاده از متد dispose در ویجت حذف کنید.این کار اطمینان می‌دهد که هرگونه منابع مرتبط با شیء آزاد شده و از مصرف غیرضروری حافظه جلوگیری می‌شود.استفاده از صحیح از استریمبرای جلوگیری از نشت حافظه ناشی از استریم ها، همواره زمانی که دیگر به Stream نیازی نیست، اشتراک آن را لغو کنید. این کار اطمینان می‌دهد که استریم در پس‌زمینه فعال باقی نمانده و حافظه را مصرف نمی‌کند.استفاده از صحیح از مدیابرای جلوگیری از نشت حافظه ناشی از تصاویر و ویدئوی های بزرگ، از تکنیک‌های کارآمد برای بارگذاری آن‌ها استفاده کنید.یکی از این تکنیک‌ها استفاده از بسته “flutter_cache_manager” است که به ذخیره‌سازی تصاویر و ویدئوها در حافظه کش کمک می‌کند و میزان حافظه مصرفی آن‌ها را کاهش می‌دهد.</description>
                <category>Hesam</category>
                <author>Hesam</author>
                <pubDate>Sat, 30 Dec 2023 19:37:07 +0330</pubDate>
            </item>
                    <item>
                <title>تفاوت اینترفیس و  Abstract در برنامه نویسی</title>
                <link>https://virgool.io/codenevis/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-%D8%A7%DB%8C%D9%86%D8%AA%D8%B1%D9%81%DB%8C%D8%B3-%D9%88-abstract-%D8%AF%D8%B1-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-uvsx15ni2qaj</link>
                <description>در بحث برنامه نویسی شی گرایی با مفاهیم به نام اینترفیس ( Interface ) و کلاس های Abstract روبرو هستیم که کارکرد و شباهت های زیادی به هم دارند.اینترفیس در برنامه نویسی چیست؟اینترفیس (Interface) در برنامه‌نویسی یک قرارداد (Contract) است که تعیین کننده‌ی مشخصه‌ها و عملکردهایی است که یک کلاس باید پیاده‌سازی کند.به عبارت دیگر، اینترفیس یک نوع مشخص برای ارتباط بین کلاس‌ها است که تضمین می‌کند که کلاس‌هایی که آن را پیاده‌سازی می‌کنند، مشخصه‌ها و عملکردهای مورد نیاز را دارند.interfaceMyInterface{  
funmyMethod() 
}classMyClass:MyInterface{overridefunmyMethod(){println(&amp;quotMyMethodimplementationinMyClass&amp;quot)} } کلاس Abstract در زبان کاتلینیک کلاس Abstract (که به عنوان “کلاس انتزاعی” هم نامیده می‌شود) در برنامه‌نویسی یک نوع کلاس است که نمی‌توانید از آن یک نمونه مستقیم ایجاد کنید.این کلاس‌ها معمولاً برای ارائه یک پایه انتزاعی برای کلاس‌های زیرمجموعه (subclasses) استفاده می‌شوند. abstractclassMyAbstractClass{
abstractfunmyAbstractMethod() 
 funmyConcreteMethod(){
println(&amp;quotConcretemethodinabstractclass&amp;quot)  }
} فرق اینترفیس با کلاس Abstractتا اینجا با ساختار هر دو مورد به خوبی آشنا شدیم و دیدیم که تقریبا کارهای مشابهی انجام میدهند. اما چه تفاوتی باهم دیگر دارند؟متد سازنده: در کلاس های Abstract میتوانید متدسازنده داشته باشید اما برای Interface نمیتوانید متد سازنده تعریف کنید.متدها: در کلاس های Abstract میتوانید متدهایی داشته باشید بخش بدنه آنها نیز پیاده سازی شده اما در اینترفیس فقط متدها تعریف میشوند.ارث بری: کلاس های Abstract میتوانند توسط کلاس های دیگر ارث برده شوند اما اینترفیس چنین قابلیتی ندارد.نوع متد: متدها در کلاس های Abstract میتوانند بصورت عمومی یا خصوصی تعریف شوند اما در اینترفیس متدها حتما باید بصورت عمومی تعریف شوند.منبع: تفاوت اینترفیس و کلاس Abstract</description>
                <category>Hesam</category>
                <author>Hesam</author>
                <pubDate>Sun, 10 Dec 2023 11:37:32 +0330</pubDate>
            </item>
                    <item>
                <title>پایگاه داده Realm فلاتر</title>
                <link>https://virgool.io/@hharddy228/%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87-%D8%AF%D8%A7%D8%AF%D9%87-realm-%D9%81%D9%84%D8%A7%D8%AA%D8%B1-snv1v9ystf8k</link>
                <description>دیتابیس Realm یک سیستم مدیریت دیتابیس object-oriented است که برای توسعه دهندگان اپلیکیشن های موبایل و دسکتاپ که توسط تیم MongoDB طراحی شده است. این دیتابیس بر روی دستگاه کاربر اجرا می شود و به همین دلیل به آن دیتابیس امبد شده (embedded database) نیز گفته می شود.این سیستم مدیریت دیتابیس برای اندروید (Android)، iOS، و دیگر پلتفرم‌های موبایل قابل استفاده است. Realm به توسعه‌دهندگان اجازه می‌دهد داده‌های برنامه خود را به سرعت و با کارآیی بالا ذخیره و بازیابی کنند.نکته مهم که باید به آن توجه کنید این است که Realm یک نوع ORM نیست بلکه یک دیتابیسی است که از ابتدا با هدف استفاده در گوشی های هوشمند طراحی شده و برای اینکار بهینه سازی های مختلفی روی آن اعمال شده است.هسته مرکزی این پایگاه داده با زبان C++ برنامه نویسی شده است.دیتابیس Realm از ویژگی های زیر برخوردار است:سرعت بالا: Realm یک دیتابیس بسیار سریع است و می تواند به سرعت و به راحتی به داده ها دسترسی پیدا کند.ساده بودن: Realm برای استفاده بسیار ساده است و نیاز به دانش زیادی در مورد پایگاه داده ها ندارد.قابل اعتماد بودن: Realm با ACID سازگار است، که به این معنی است که داده ها همیشه در حالت یکپارچه و سازگار باقی می مانند.امنیت: Realm از رمزگذاری AES-256 برای محافظت از داده ها استفاده می کند.آموزش پیاده سازیبرای شروع ابتدا با دستور زیر پکیج مورد نیاز را به پروژه فلاتر اضافه میکنیم.flutter pub add realmdart run realm installبعد از اضافه کردن پکیج های مورد نیاز کلاس مدل خود را میسازیم.در این مثال یک کلاس دانشجو در اختیار داریم که عملیات crud را روی انجام میدیم.یک فایل به نام student ایجاد میکنیم.در این کلاس با @RealmModel() مشخص کرده ایم که از این کلاس برای ذخیره سازی اطلاعات استفاده خواهیم کرد.با کمک @PrimaryKey() نیز کلید اصلی پایگاه داده را مشخص میکنیم کدام فیلد باشد.در ابتدای این فایل عبارت part ‘student.g.dart’; را نیز باید قرار دهید, این تکه در ادامه کدهای مورد نیاز کلاس را ایجاد میکند.با اجرای دستور زیر در ترمینال کدهایی که برای ذخیره اطلاعات این کلاس در دیتابیس نیاز ساخته میشود.dart run realm generateبرای اینکه کدهای بخش دیتابیس به شکل تمیز نوشته شوند یک کلاس جدا به نام StudentDatabase ایجاد میکنیم و تمام متدهای مورد نیاز برای انجام عملیات CRUD را در آن قرار میدهیم.کدهای کلاس به شکل زیر میباشد.در این کلاس یک نمونه از کلاس Realm میسازیم که برای پارامتر ورودی از آبجکت config که مشخص کننده کلاس مدل است استفاده میکنیم.در ادامه چهار متد میسازیم که هر کدام عملیات CRUD را انجام میدهند.برای ذخیره سازی اطلاعات از دستور realm.write استفاده میکنیم, اگر مقدار update را برابر true قرار دهید در صورت وجود رکورد آن را آپدیت میکند.برای دریافت لیست کامل رکوردهای یک کلاس از دستور realm.objects().toList() میتوانید استفاده کنید.منبع: دیتابیس Realm چیست؟ آموزش پیاده سازی در فلاتر</description>
                <category>Hesam</category>
                <author>Hesam</author>
                <pubDate>Mon, 06 Nov 2023 11:33:51 +0330</pubDate>
            </item>
                    <item>
                <title>قوانین Lint در فلاتر</title>
                <link>https://virgool.io/@hharddy228/%D9%82%D9%88%D8%A7%D9%86%DB%8C%D9%86-lint-%D8%AF%D8%B1-%D9%81%D9%84%D8%A7%D8%AA%D8%B1-sayozbjqhqjd</link>
                <description>لینت در واقع یک سری از قوانین و قواعد است که کمک میکند به ما تا هم کدهای تمیز تری بنویسیم و هم از بروز خطاهای احتمالی جلوگیری کنیم.این کار به وسیله ابزار Lint انجام میشود که کدهای نوشته شده را آنالیز میکند و موارد لازم, خطاها, باگ ها و باقی مسائل را نمایش میدهد.لینتینگ یک فرآیند است که در آن کد منبع برای خطاهای برنامه نویسی و همچنین خطاهای سبکی و کد بدون قالب چک می‌شود.این به شناسایی برخی از اشتباهات رایج و نادری که در طول برنامه نویسی انجام می‌شود، مانند اشتباهات منطقی، متغیرهای غیر استفاده شده، دستورهای if-else خالی و موارد دیگر، کمک می‌کند.لینتر (Lint) یک ابزار است که کد منبع را برای یافتن خطاهای برنامه نویسی، باگ‌ها، خطاهای سبکی و ساختارهای مشکوک تجزیه و تحلیل می‌کند. این ابزار به تأیید کیفیت کد کمک می‌کند.نمونه خطاهایی که ممکن است رخ دهندهمانطور که گفته شد لینت شامل یک سری قوانین است که با رعایت کردن آنها از بروز خطاهای مختلف جلوگیری میکنیم.یکی از آن قوانین متغیرها و کلاس های استفاده نشده است.به کد زیر توجه کنید.

class MyApp extends StatelessWidget {
Widget build(context) {
return Scaffold(
appBar: AppBar(title: Text(&#039;Lint Rules Demo&#039;),),
body: Center(
child: Text(&#039;Heey There!&#039;),),
);
}
در کد بالا در خط دوم یک امیپورت انجام داده ایم اما از آن در طول برنامه هیچ استفاده ای نکرده ایم.همین شرایط برای متغیرهایی که تعریف میکنیم ولی از آنها استفاده نمیکنیم هم رخ میدهد.پیاده سازی Lint در فلاترمعمولا توصیه میشود که در یک پروژه از همان ابتدا سیستم لینت پیاده سازی شود نه در انتها.قوانین لینت شامل سه دسته بندی مختلف میباشد که میتوانید از آنها استفاده کنید.قوانین خطا – این قوانین مرتبط با خطاهای رایجی هستند که هنگام برنامه‌نویسی رخ می‌دهند.قوانین سبک – این قوانین به سبک نوشتاری کد متمرکز هستند، به عنوان مثال، به دستورالعمل سبکی که توسط راهنمای سبک Dart تعیین شده است.Pub – این قوانین مرتبط با مسائل مربوط به ابزار Pub هستند. Pub یک ابزار مدیریت پکیج‌ها در دارت است و مرتبط با موضوعاتی مانند وابستگی‌ها و مدیریت پکیج‌ها در پروژه‌های دارت می‌شود.در حال حاضر برخلاف گذشته زمانی که پروژه جدیدی در فریمورک فلاتر ایجاد میکنید فایل analysis_options.yaml هم همراه با آن ساخته میشود و نیازی به تعریف آن ندارید.اما اگر پروژه شما قدیمی است نیاز دارید تا این فایل را حتما بسازید.این فایل زمانی کاربرد دارد که بخواهید از قوانین مشخصی از Lint استفاده کنید.در غیر اینصورت با این فایل میتوانید کاری نداشته باشید.دو روش کلی برای ایجاد قوانین لینت وجود دارد.۱: استفاده از قوانین موجود قبلی۲: ایجاد قوانین شخصی سازی شده خودتاناستفاده از قوانین کلی لینتبرای روش اول یعنی استفاده از قوانین موجود قبلی lint پکیج های مختلفی وجود دارد که میتوانید از آنها استفاده کنید.Dart linter و Flutter_lints از محبوب ترین آنها میباشد.در پروژه های فلاتر پکیج Flutter_lints بصورت پیشفرض وجود دارد.ایجاد قوانین شخصی لینتاین قوانینی هستند که هر فرد بر اساس مشخصات شخصی خود بدون استفاده از بسته‌های dart_lint /flutter_lint که قوانین تنظیم شده از پیش را دارند، تنظیم می‌کند.هنگام تنظیم و سفارشی‌سازی قوانین لینتر فردی خود، شما قوانین را در فایل analysis_options.yaml به عنوان نشان‌داده شده در مرحله قبل خواهید کرد.در زیر ساختار یک فایل analysis_options.yaml جدید قبل از افزودن تغییرات به آن نمایش داده شده است:# This file configures the analyzer, which statically analyzes Dart code to# check for errors, warnings, and lints.## The issues identified by the analyzer are surfaced in the UI of Dart-enabled# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be# invoked from the command line by running `flutter analyze`. # The following line activates a set of recommended lints for Flutter apps,# packages, and plugins designed to encourage good coding practices.include: package:flutter_lints/flutter.yaml linter:  # The lint rules applied to this project can be customized in the  # section below to disable rules from the `package:flutter_lints/flutter.yaml`  # included above or to enable additional rules. A list of all available lints  # and their documentation is published at  # https://dart-lang.github.io/linter/lints/index.html.  #  # Instead of disabling a lint rule for the entire project in the  # section below, it can also be suppressed for a single line of code  # or a specific dart file by using the `// ignore: name_of_lint` and  # `// ignore_for_file: name_of_lint` syntax on the line or in the file  # producing the lint.  rules:    # avoid_print: false  # Uncomment to disable the `avoid_print` rule    # prefer_single_quotes: true  # Uncomment to enable the `prefer_single_quotes` rule # Additional information about this file can be found at# https://dart.dev/guides/language/analysis-options
برخی از قوانین lintدر این قسمت بخشی از قوانین لینت را باهم بررسی میکنیم.از دستور Print استفاده نکنیدیکی از قوانین لینت عدم استفاده از دستور پرینت در پروژه نهایی است.برای کدهای تولیدی، در نظر داشته باشید که از یک چارچوب ورودی‌ها استفاده کنید.اگر از فریم‌ورک Flutter استفاده می‌کنید، می‌توانید از debugPrint استفاده کنید یا تماس‌های print خود را با یک بررسی برای kDebugMode محاصره کنید.به روش های زیر میتوانید عمل کنید.
void f(int x) {
debugPrint(&#039;debug: $x&#039;);
...
}
یا
void f(int x) {
log(&#039;log: $x&#039;);
...
}
یا
void f(int x) {
if (kDebugMode) {
print(&#039;debug: $x&#039;);
}
...
}منبع: آموزش فلاتر</description>
                <category>Hesam</category>
                <author>Hesam</author>
                <pubDate>Fri, 13 Oct 2023 18:47:14 +0330</pubDate>
            </item>
                    <item>
                <title>آموزش استفاده از آرایه و لیست در زبان برنامه نویسی کاتلین</title>
                <link>https://virgool.io/@hharddy228/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%D8%A2%D8%B1%D8%A7%DB%8C%D9%87-%D9%88-%D9%84%DB%8C%D8%B3%D8%AA-%D8%AF%D8%B1-%D8%B2%D8%A8%D8%A7%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%DA%A9%D8%A7%D8%AA%D9%84%DB%8C%D9%86-grh0l5tb6ksr</link>
                <description>آرایه و لیست دو ساختار داده مهم و پرکاربرد در برنامه نویسی هستند که برای ذخیره و مدیریت مجموعه‌ای از داده‌ها به کار می‌روند.لیست یک ساختار داده مهم در زبان برنامه‌نویسی کاتلین است که برای ذخیره‌سازی مجموعه‌ای از داده‌های همگن به کار می‌رود.لیست‌ها اجازه می‌دهند تا داده‌های متعدد را به صورت منسجم در یک متغیر ذخیره کنیم.برای طراحی اپلیکیشن اندروید تسلط به زبان برنامه نویسی کاتلین بسیار ضروری میباشد.در این مقاله قصد داریم ضمن معرفی لیست، نحوه پیاده‌سازی و مهم‌ترین متدهای آن در کاتلین را بررسی کنیم.کاربرد استفاده از آرایه و لیست در کاتلینلیست‌ها به عنوان یک ابزار قدرتمند برای ذخیره‌سازی و مدیریت مجموعه‌های داده‌ها مورد استفاده قرار می‌گیرند.از جمله کاربردهای اصلی لیست‌ها در برنامه‌نویسی کاتلین می‌توان به موارد زیر اشاره کرد:ذخیره داده‌های مشابه: لیست‌ها به برنامه‌نویسان اجازه می‌دهند تا مجموعه‌هایی از داده‌های مشابه را در یک مکان ذخیره کنند.به عنوان مثال، لیستی از اعداد صحیح، لیستی از رشته‌ها یا حتی لیستی از آبجکت‌ها.پیمایش و دسترسی به داده‌ها: لیست‌ها این امکان را به ما می‌دهند تا به سادگی به داده‌ها با استفاده از اندیس‌ها دسترسی پیدا کنیم.اندیس‌ها از ۰ به بالا شماره‌گذاری می‌شوند و می‌توانیم به اعضای خاص با استفاده از اندیس مربوطه دسترسی یابیم.کاربردهای لیست در کاتلین:ذخیره‌سازی مجموعه‌ای از اطلاعات مرتبط مانند لیست دانشجویان، کالاها، تراکنش‌های بانکی و …دسترسی تصادفی به عناصر با استفاده از شاخصجستجوی سریع عناصرمرتب‌سازی عناصراضافه و حذف کردن عناصرعبور دادن لیست به توابع برای پردازش‌های بعدیپیاده سازی لیست در زبان کاتلیندر زبان برنامه‌نویسی کاتلین، listOf و ArrayList دو روش مختلف برای ایجاد و مدیریت لیست‌ها (مجموعه‌های داده) هستند. این دو دارای تفاوت‌های مهمی هستند:تعریف لیست با استفاده از listOf در کاتلینlistOf یک تابع در زبان برنامه‌نویسی کاتلین است که برای ایجاد لیست‌های نامغیر (immutable) استفاده می‌شود.لیست‌های ایجاد شده با listOf نمی‌توانند پس از ایجاد تغییر یابند، به این معنا که نمی‌توانید عناصر لیست را اضافه، حذف یا تغییر دهید.نحوه استفاده از آن به شکل زیر میباشد.val numbers = listOf(1, 2, 3, 4, 5)val colors = listOf(&amp;quotRed&amp;quot, &amp;quotGreen&amp;quot, &amp;quotBlue&amp;quot)در مثال بالا، numbers یک لیست از اعداد صحیح و colors یک لیست از رشته‌ها ایجاد می‌کند.ویژگی‌های listOf:نامغیر (Immutable): یکبار ایجاد شده، عناصر لیست با listOf نمی‌توانند تغییر کنند. این ویژگی برای استفاده‌هایی که به داده‌های ثابت و بدون تغییر نیاز دارید مناسب است.سادگی: listOf بسیار ساده و آسان در استفاده است. تنها کافیست عناصر مورد نظر خود را به عنوان آرگومان‌ها به تابع بدهید.عملیات‌های پایه‌ای: از طریق متدهای مربوط به لیست‌ها مانند size و get می‌توانید به عناصر لیست دسترسی پیدا کنید.مثال دیگرval fruits = listOf(&amp;quotApple&amp;quot, &amp;quotBanana&amp;quot, &amp;quotOrange&amp;quot)println(&amp;quotTotal fruits: ${fruits.size}&amp;quot) // Output: Total fruits: 3println(&amp;quotFirst fruit: ${fruits.get(0)}&amp;quot) // Output: First fruit: Appleتوجه داشته باشید که اگر به عنوان برنامه‌نویس نیاز دارید که داده‌های لیست را پس از ایجاد تغییر دهید یا به روش‌های پویا با داده‌های لیست کار کنید، باید از ساختارهای متغیر مانند ArrayList استفاده کنید.تعریف لیست با استفاده از ArrayList در کاتلینArrayList در زبان برنامه‌نویسی کاتلین یک کلاس از جاوا است که برای ایجاد و مدیریت لیست‌های متغیر (mutable) استفاده می‌شود.این کلاس به شما امکان می‌دهد عناصر را به لیست اضافه کرده، عناصر را حذف کنید، اندیس‌ها را تغییر دهید و به صورت پویا با لیست کار کنید.نحوه استفاده: برای استفاده از ArrayList در کاتلین، ابتدا باید یک نمونه از این کلاس ایجاد کنید و سپس از متدهای مختلف آن برای اضافه کردن و مدیریت عناصر استفاده کنید.val fruits = ArrayList&lt;String&gt;()در این مرحله لیست ما تعریف شده اما هیچ آیتمی در آن قرار ندارد. ما نیاز داریم تا لیست را با اسفتاده از اطلاعات مناسب پر کنیم.برای اینکار از متد add استفاده میکنیم.fruits.add(&amp;quotApple&amp;quot)fruits.add(&amp;quotBanana&amp;quot)fruits.add(&amp;quotOrange&amp;quot)در بعضی شرایط نیاز داریم تا بتوانیم یک سری از اطلاعات را نیز از لیست حذف کنیم.به منظور انجام اینکار از متد remove استفاده میکنیم.fruits.remove(&amp;quotBanana&amp;quot)مهم ترین متدهای لیستsize: این متد تعداد عناصر موجود در لیست را بازگردانده و امکان شمارش تعداد عناصر را فراهم می‌کند.get(index: Int): با استفاده از این متد، می‌توانید به اعضای لیست با استفاده از اندیس دسترسی پیدا کنید. به عنوان مثال numbers[0] اعضای لیست numbers در اندیس ۰ را باز می‌گرداند.add(element: E): این متد به شما اجازه می‌دهد یک عنصر جدید به انتهای لیست اضافه کنید.remove(element: E): با استفاده از این متد، می‌توانید یک عنصر خاص را از لیست حذف کنید.isEmpty(): این متد بررسی می‌کند که آیا لیست خالی است یا خیر.contains(element: E): با استفاده از این متد می‌توانید بررسی کنید که آیا یک عنصر خاص درون لیست وجود دارد یا خیر.indexOf(element: E): این متد اندیس اولین رخداد یک عنصر مشخص در لیست را باز می‌گرداند.این مثال‌ها و متدها تنها یک بخش کوچک از قابلیت‌ها و ویژگی‌های لیست‌ها در زبان کاتلین هستند.</description>
                <category>Hesam</category>
                <author>Hesam</author>
                <pubDate>Thu, 31 Aug 2023 21:42:24 +0330</pubDate>
            </item>
            </channel>
</rss>