موردی که ممکنه در آینده بدرد خودتون یا اطرافیان تون بخوره
قطعا اگر این مسیر رو ادامه بدید بدردتون میخوره
https://virgool.io/applymag/%DA%86%D8%B7%D9%88%D8%B1-%D8%A8%D9%87-%D8%B9%D9%86%D9%88%D8%A7%D9%86-%DB%8C%D9%87-%D8%A7%DB%8C%D8%B1%D8%A7%D9%86%DB%8C-%D8%A8%D8%A7-%DB%B3%DB%B0%DB%B0-%DB%8C%D9%88%D8%B1%D9%88-%D8%AA%D9%88-%D8%A7%D8%B1%D9%88%D9%BE%D8%A7-%D8%B4%D8%B1%DA%A9%D8%AA-%D8%AB%D8%A8%D8%AA-%DA%A9%D9%86%DB%8C%D9%85-ubgyakdugueb
#M_Sh
@persians_python
قطعا اگر این مسیر رو ادامه بدید بدردتون میخوره
https://virgool.io/applymag/%DA%86%D8%B7%D9%88%D8%B1-%D8%A8%D9%87-%D8%B9%D9%86%D9%88%D8%A7%D9%86-%DB%8C%D9%87-%D8%A7%DB%8C%D8%B1%D8%A7%D9%86%DB%8C-%D8%A8%D8%A7-%DB%B3%DB%B0%DB%B0-%DB%8C%D9%88%D8%B1%D9%88-%D8%AA%D9%88-%D8%A7%D8%B1%D9%88%D9%BE%D8%A7-%D8%B4%D8%B1%DA%A9%D8%AA-%D8%AB%D8%A8%D8%AA-%DA%A9%D9%86%DB%8C%D9%85-ubgyakdugueb
#M_Sh
@persians_python
ویرگول
چطور به عنوان یه ایرانی با ۳۰۰ یورو تو اروپا شرکت ثبت کنیم؟
اگر شما برنامه نویس هستید و تو ایران (یا هرجای دیگه دنیا) زندگی میکنید ممکنه دنبال شغل ریموت از بقیه دنیا یا حتی ایدهای جهانی دارید ولی از…
👍2👎1
پایتون فارسی(PyCore)
۳۰ شرکت بزرگ دنیا که از پایتون استفاده می کنند #M_Sh @persians_python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
#SADRA_K
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
توابع مفید پایتونی🔥
این قسمت: لامبدا🥸
لامبدا در پایتون به عنوان یک ابزار بسیار قدرتمند استفاده میشود که به شما این امکان را میدهد که توابع کوتاه و مفیدی را در یک خط کد تعریف کنید. گاهی اوقات به آن به عنوان توابع ناشناخته یا توابع بدون نام هم اشاره میشود.
لامبداها معمولاً در جاهایی استفاده میشوند که نیاز به تعریف یک تابع کوتاه و موقت دارید، بدون اینکه نیازی به تعریف یک تابع کامل باشد.
برای تعریف یک لامبدا در پایتون، از واژه کلیدی
در اینجا:
-
-
برای مثال، اگر بخواهیم یک تابع لامبدا بنویسیم که دو عدد را جمع کند، کد زیر را میتوانیم بنویسیم:
در این مثال،
#lambda
#mahyar
این قسمت: لامبدا🥸
لامبدا در پایتون به عنوان یک ابزار بسیار قدرتمند استفاده میشود که به شما این امکان را میدهد که توابع کوتاه و مفیدی را در یک خط کد تعریف کنید. گاهی اوقات به آن به عنوان توابع ناشناخته یا توابع بدون نام هم اشاره میشود.
لامبداها معمولاً در جاهایی استفاده میشوند که نیاز به تعریف یک تابع کوتاه و موقت دارید، بدون اینکه نیازی به تعریف یک تابع کامل باشد.
برای تعریف یک لامبدا در پایتون، از واژه کلیدی
lambda استفاده میشود. سینتکس کلی آن به صورت زیر است:lambda arguments: expressionدر اینجا:
-
arguments: ورودیهای تابع به صورت آرگومانها مشخص میشوند.-
expression: عبارتی که تابع باید انجام دهد.برای مثال، اگر بخواهیم یک تابع لامبدا بنویسیم که دو عدد را جمع کند، کد زیر را میتوانیم بنویسیم:
add = lambda x, y: x + y
print(add(3, 5)) # Output: 8
در این مثال،
lambda x, y: x + y یک تابع لامبدا است که دو آرگومان x و y را میگیرد و جمع آنها را برمیگرداند. توابع لامبدا به صورت پیشفرض خروجی تابع را return میکنند پس برای استفاده باید آنهارا پرینت کنید.#lambda
#mahyar
👍4👌1
Splash Pro AI
#هوش_مصنوعی برای ایجاد آهنگ از متن
این سرویس که از هوش مصنوعی پشتیبانی میکند، دری را به روی دنیای خلاقیت موسیقی باز میکند و به شما امکان میدهد حتی بدون دانش عمیق موسیقی، آهنگهای شخصی ایجاد کنید.
@persians_python
#هوش_مصنوعی برای ایجاد آهنگ از متن
این سرویس که از هوش مصنوعی پشتیبانی میکند، دری را به روی دنیای خلاقیت موسیقی باز میکند و به شما امکان میدهد حتی بدون دانش عمیق موسیقی، آهنگهای شخصی ایجاد کنید.
@persians_python
در این پست قراره تمایز اغلب گیج کننده بین function و method هارو را بررسی کنیم🥸. هر دو بلوک های اساسی در پایتون هستند اما اهداف کمی تفاوت دارد. ما آنها را در کنار هم در قالب جدول با هم مقایسه خواهیم کرد و نمونه های کد واقعی را برای نشان دادن نحوه استفاده از هر کدام ارائه می دهیم. چه مبتدی باشید و چه به دنبال تقویت مهارت های پایتون خود باشید، این تفکیک دقیق به شما درک روشنی از زمان و نحوه استفاده موثر از function ها و method ها می دهد.
تابع(functios)در پایتون چیست؟ در پایتون، یک تابع یک بلوک از کد است که برای انجام یک کار خاص طراحی شده است. توابع به تقسیم برنامه ما به قطعات کوچکتر و ماژولار کمک می کنند. با ایجاد برنامه های پیچیده تر، توابع را می توان مجدداً مورد استفاده قرار داد و کد شما را سازماندهی و مدیریت کرد. مثالی از یک تابع:
متد در پایتون چیست؟
متد، به عکس تابع، یک تابع است که به یک شیء مرتبط است. در پایتون، متدها مستقل نیستند و باید بر روی یک شیء یا داخل یک کلاس فراخوانی شوند. متدها به طور ضمنی از یک شیء استفاده میکنند که برای آن فراخوانی شدهاند.
برای درک بهتر به مثال زیر توجه کنید.
در اینجا، greet یک متد از کلاس Greeter است و بر روی نمونه g از آن کلاس فراخوانی میشود.
در ادامه چند مثال عملی رو باهم بررسی میکنیم.
Function:
در اینجا یک تابع ساده برای به دست اوردن فاکتوریل یک عدد داریم.(5!)
Method:
در اینجا تابع description یک متود است که جزئیات مربوط به یک نمونه خودرو رو نشون میده.
درک تمایز بین توابع و متودها در پایتون برای نوشتن کد واضح و موثر بسیار مهم است. توابع ماژولار بودن و قابلیت استفاده مجدد را ارائه می دهند، در حالی که متود ها ما را قادر می سازند تا رفتارهای درون اشیاء را با رعایت اصول برنامه نویسی شی گرا محصور کنیم. اینکه یک تابع یا یک روش را انتخاب کنید تا حد زیادی به نیازهای خاص برنامه و ترجیحات طراحی شما بستگی دارد. با درک این مفاهیم، می توانید از انعطاف پذیری و استحکام پایتون در پروژه های برنامه نویسی خود استفاده کنید و کد خود را سازماندهی و پویا تر کنید.
منبع
#mahyar
تابع(functios)در پایتون چیست؟ در پایتون، یک تابع یک بلوک از کد است که برای انجام یک کار خاص طراحی شده است. توابع به تقسیم برنامه ما به قطعات کوچکتر و ماژولار کمک می کنند. با ایجاد برنامه های پیچیده تر، توابع را می توان مجدداً مورد استفاده قرار داد و کد شما را سازماندهی و مدیریت کرد. مثالی از یک تابع:
def greet(name):
return f"Hello, {name}!"
print(greet("ali")) # Output: Hello, ali!
متد در پایتون چیست؟
متد، به عکس تابع، یک تابع است که به یک شیء مرتبط است. در پایتون، متدها مستقل نیستند و باید بر روی یک شیء یا داخل یک کلاس فراخوانی شوند. متدها به طور ضمنی از یک شیء استفاده میکنند که برای آن فراخوانی شدهاند.
برای درک بهتر به مثال زیر توجه کنید.
class Greeter:
def __init__(self, name):
self.name = name
def greet(self):
return f"Hello, {self.name}!"
g = Greeter("ali")
print(g.greet()) # Output: Hello, ali!
در اینجا، greet یک متد از کلاس Greeter است و بر روی نمونه g از آن کلاس فراخوانی میشود.
در ادامه چند مثال عملی رو باهم بررسی میکنیم.
Function:
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
print(factorial(5)) # Output: 120
در اینجا یک تابع ساده برای به دست اوردن فاکتوریل یک عدد داریم.(5!)
Method:
class Car:
def __init__(self, make, model):
self.make = make
self.model = model
def description(self):
return f"{self.make} {self.model}"
my_car = Car("Toyota", "Corolla")
print(my_car.description()) # Output: Toyota Corolla
در اینجا تابع description یک متود است که جزئیات مربوط به یک نمونه خودرو رو نشون میده.
درک تمایز بین توابع و متودها در پایتون برای نوشتن کد واضح و موثر بسیار مهم است. توابع ماژولار بودن و قابلیت استفاده مجدد را ارائه می دهند، در حالی که متود ها ما را قادر می سازند تا رفتارهای درون اشیاء را با رعایت اصول برنامه نویسی شی گرا محصور کنیم. اینکه یک تابع یا یک روش را انتخاب کنید تا حد زیادی به نیازهای خاص برنامه و ترجیحات طراحی شما بستگی دارد. با درک این مفاهیم، می توانید از انعطاف پذیری و استحکام پایتون در پروژه های برنامه نویسی خود استفاده کنید و کد خود را سازماندهی و پویا تر کنید.
منبع
#mahyar
👍1
پایتون فارسی(PyCore)
در این پست قراره تمایز اغلب گیج کننده بین function و method هارو را بررسی کنیم🥸. هر دو بلوک های اساسی در پایتون هستند اما اهداف کمی تفاوت دارد. ما آنها را در کنار هم در قالب جدول با هم مقایسه خواهیم کرد و نمونه های کد واقعی را برای نشان دادن نحوه استفاده…
اینم یه جدول برای درک بهتر تفاوت متود و تابع
در این پست نکات و ترفند های پیشرفته مدل های جنگو رو بررسی خواهیم کرد.🥸
از جمله: ...indexing, custom managers, inheritance
ارث بری مدل ها به شما امکان می دهد یک مدل پایه با اطلاعات رایج ایجاد کنید و آن را در مدل های دیگر گسترش دهید. جنگو از سه نوع model inheritance پشتیبانی می کند:
abstract base classes, multi-table inheritance, and proxy models
Using Abstract Models:
روشی فوقالعاده برای جمعبندی اطلاعات و رفتار مشترک هستند. برای یک abstract model هیچ جدولی در دیتابیس نشان داده نمی شود. در عوض، فیلدها و متدهای آن توسط زیر کلاسها به ارث میرسند.
Example:
در اینجا BaseProfile مانند یک الگو عمل میکند.StudentProfile, TeacherProfile هر دو دارای فیلد های bio , avatar خواهند بود اما هر کدام در جدول های پایگاه داده خودشان ذخیره میشوند.
Custom Managers :
در جنگو Custom Managers به شما این امکان را می دهند که عملکردهای سطح جدول را به مدل های جنگو خود اضافه کنید. آنها را می توان برای کپسوله کردن و عملیات های crud پیچیده و ارائه یک API تمیزتر برای مدل استفاده کرد.
Example:
این custom manager تمامی query های شمارو بر اساس "deleted" فیلتر میکند.
Models Migrations:
مدیریت Migrations مدلها
در جنگو migrations به شما امکان میدهند تا طی زمان، طرح پایگاه داده خود را تکامل دهید. مدیریت مناسب migrations ها برای حفظ یک پروژه سالم بسیار حیاتی است.
توصیهها:
برنامهریزی migrations خود: سعی کنید هنگام امکانپذیر بودن، مهاجرتها را ترکیب کنید و آنها را به کنترل نسخه منتقل کنید.
تست migrations: همیشه migrations را به صورت محلی و در محیط استیجینگ تست کنید، قبل از اعمال آنها در محیط تولید.
استفاده از دستور makemigrations برای تولید فایلهای migrations
استفاده از دستور migrate برای اعمال migrations ها
استفاده از دستور sqlmigrate برای پیشنمایش دستور sql
Proxy Models:
مدلهای پروکسی برای تغییر رفتار یک مدل، مانند defualt ordering یا custom manager بدون ایجاد جدول پایگاه داده جدید استفاده میشوند.
Example:
این پروکسی مدل تمامی profile هارا بر اساس نام نشان میدهد.
Multi-table Inheritance:
این نوع وراثت زمانی استفاده می شود که هر مدل در سلسله مراتب به تنهایی یک موجودیت کامل در نظر گرفته شود که به طور بالقوه به جدول پایگاه داده دیگری مرتبط است.به زبان ساده هر مدل به تنهایی میتواند در یک جدول جداگانه در پایگاه داده نمایش داده شود، به جای اینکه همه اطلاعات در یک جدول واحد ذخیره شود.
مدل Restaurant از مدل Place ارثبری میکند. این بدان معنی است که همه فیلدهای Place به صورت اتوماتیک به Restaurant ارث میبرده شده و Restaurant از همه ویژگیهای Place استفاده میکند.
این الگو به شما امکان میدهد که یک مدل (در اینجا Restaurant) را برای ارثبری از ویژگیها و رفتارهای یک مدل دیگر (در اینجا Place) استفاده کنید، در حالی که همچنان میتوانید به آن فیلدها و ویژگیهای جدیدی را اضافه کنید.
ادامه مطالب در پست بعد
#djnago
#model
#mahyar
از جمله: ...indexing, custom managers, inheritance
ارث بری مدل ها به شما امکان می دهد یک مدل پایه با اطلاعات رایج ایجاد کنید و آن را در مدل های دیگر گسترش دهید. جنگو از سه نوع model inheritance پشتیبانی می کند:
abstract base classes, multi-table inheritance, and proxy models
Using Abstract Models:
روشی فوقالعاده برای جمعبندی اطلاعات و رفتار مشترک هستند. برای یک abstract model هیچ جدولی در دیتابیس نشان داده نمی شود. در عوض، فیلدها و متدهای آن توسط زیر کلاسها به ارث میرسند.
Example:
class BaseProfile(models.Model):
bio = models.TextField()
avatar = models.ImageField(upload_to='avatars/')
class Meta:
abstract = True
class StudentProfile(BaseProfile):
graduation_year = models.IntegerField()
class TeacherProfile(BaseProfile):
office = models.CharField(max_length=100)
در اینجا BaseProfile مانند یک الگو عمل میکند.StudentProfile, TeacherProfile هر دو دارای فیلد های bio , avatar خواهند بود اما هر کدام در جدول های پایگاه داده خودشان ذخیره میشوند.
Custom Managers :
در جنگو Custom Managers به شما این امکان را می دهند که عملکردهای سطح جدول را به مدل های جنگو خود اضافه کنید. آنها را می توان برای کپسوله کردن و عملیات های crud پیچیده و ارائه یک API تمیزتر برای مدل استفاده کرد.
Example:
class ActiveProfileManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(deleted=False)
class Profile(models.Model):
name = models.CharField(max_length=100)
deleted = models.BooleanField(default=False)
objects = models.Manager() # The default manager.
active_objects = ActiveProfileManager() # Our custom manager.
# Usage:
active_profiles = Profile.active_objects.all()
این custom manager تمامی query های شمارو بر اساس "deleted" فیلتر میکند.
Models Migrations:
مدیریت Migrations مدلها
در جنگو migrations به شما امکان میدهند تا طی زمان، طرح پایگاه داده خود را تکامل دهید. مدیریت مناسب migrations ها برای حفظ یک پروژه سالم بسیار حیاتی است.
توصیهها:
برنامهریزی migrations خود: سعی کنید هنگام امکانپذیر بودن، مهاجرتها را ترکیب کنید و آنها را به کنترل نسخه منتقل کنید.
تست migrations: همیشه migrations را به صورت محلی و در محیط استیجینگ تست کنید، قبل از اعمال آنها در محیط تولید.
استفاده از دستور makemigrations برای تولید فایلهای migrations
استفاده از دستور migrate برای اعمال migrations ها
استفاده از دستور sqlmigrate برای پیشنمایش دستور sql
Proxy Models:
مدلهای پروکسی برای تغییر رفتار یک مدل، مانند defualt ordering یا custom manager بدون ایجاد جدول پایگاه داده جدید استفاده میشوند.
Example:
class OrderedProfile(Profile):
class Meta:
proxy = True
ordering = ['name']
# Usage:
ordered_profiles = OrderedProfile.objects.all()
این پروکسی مدل تمامی profile هارا بر اساس نام نشان میدهد.
Multi-table Inheritance:
این نوع وراثت زمانی استفاده می شود که هر مدل در سلسله مراتب به تنهایی یک موجودیت کامل در نظر گرفته شود که به طور بالقوه به جدول پایگاه داده دیگری مرتبط است.به زبان ساده هر مدل به تنهایی میتواند در یک جدول جداگانه در پایگاه داده نمایش داده شود، به جای اینکه همه اطلاعات در یک جدول واحد ذخیره شود.
class Place(models.Model):
name = models.CharField(max_length=50)
class Restaurant(Place):
serves_pizza = models.BooleanField(default=False)
مدل Restaurant از مدل Place ارثبری میکند. این بدان معنی است که همه فیلدهای Place به صورت اتوماتیک به Restaurant ارث میبرده شده و Restaurant از همه ویژگیهای Place استفاده میکند.
این الگو به شما امکان میدهد که یک مدل (در اینجا Restaurant) را برای ارثبری از ویژگیها و رفتارهای یک مدل دیگر (در اینجا Place) استفاده کنید، در حالی که همچنان میتوانید به آن فیلدها و ویژگیهای جدیدی را اضافه کنید.
ادامه مطالب در پست بعد
#djnago
#model
#mahyar
👍1
پایتون فارسی(PyCore)
در این پست نکات و ترفند های پیشرفته مدل های جنگو رو بررسی خواهیم کرد.🥸 از جمله: ...indexing, custom managers, inheritance ارث بری مدل ها به شما امکان می دهد یک مدل پایه با اطلاعات رایج ایجاد کنید و آن را در مدل های دیگر گسترش دهید. جنگو از سه نوع model…
در ادامه پست قبلی:
Indexing:
ایندکس ها برای بهبود عملکرد عملیات پایگاه داده، به ویژه برای مجموعه داده های بزرگ، ضروری هستند.
به عنوان مثال، فرض کنید شما یک جدول کاربران دارید و میخواهید بر اساس نام آنها جستجو کنید. بدون ایندکس، پایگاه داده باید هر رکورد را از ابتدا تا انتها بررسی کند تا نام مورد نظر را پیدا کند. اما با ایجاد یک ایندکس بر روی فیلد نام، پایگاه داده میتواند به سرعت به رکوردهای مرتبط با نام مورد نظر دسترسی پیدا کند.
Example:
Overriding Model Methods:
وقتی در Django یک مدل ایجاد میکنید، میتوانید رفتارهای خاصی را برای عملیاتهای مختلف مدل، مانند ذخیرهسازی یا حذف، سفارشیسازی کنید. این کار به شما این امکان را میدهد که قبل یا بعد از انجام یک عملیات، کارهای خاصی انجام دهید. شما میتوانید عملیات save , delete ,.... رو بازنویسی کنید.
Example:
در این مثال، هر زمان که یک نمونه از MyModel ذخیره میشود، مقدار فیلد name به حروف بزرگ تبدیل میشود قبل از ذخیرهسازی و سپس عملیات ذخیرهسازی انجام میشود.
Soft Deletion:
استفاده از Soft Deletion به شما این امکان را میدهد که آیتمها را به عنوان حذف شده علامتگذاری کنید، اما در واقع آنها را از پایگاه داده حذف نکنید. به این تکنیک "حذف نرم" یا "حذف موقت" نیز گفته میشود. این روش برای نگهداری تاریخچه دادهها، امکان بازگردانی آیتمهای حذف شده و همچنین حفظ ارتباطات بین آیتمهای مختلف مفید است.
Example:
هر یک از این تکنیک ها مجموعه ای از مزایای خاص خود را ارائه می دهد و می تواند به طور قابل توجهی بر کارایی و عملکرد پروژه های شما تأثیر بگذارد. با اجرای این استراتژیها، میتوانید از قابلیتهای قدرتمند مدلسازی جنگو برای ساخت برنامههای کاربردی وب قویتر و مقیاسپذیرتر بهره ببرید.
منبع
#djnago
#model
#mahyar
Indexing:
ایندکس ها برای بهبود عملکرد عملیات پایگاه داده، به ویژه برای مجموعه داده های بزرگ، ضروری هستند.
به عنوان مثال، فرض کنید شما یک جدول کاربران دارید و میخواهید بر اساس نام آنها جستجو کنید. بدون ایندکس، پایگاه داده باید هر رکورد را از ابتدا تا انتها بررسی کند تا نام مورد نظر را پیدا کند. اما با ایجاد یک ایندکس بر روی فیلد نام، پایگاه داده میتواند به سرعت به رکوردهای مرتبط با نام مورد نظر دسترسی پیدا کند.
Example:
class User(models.Model):
username = models.CharField(max_length=100, db_index=True)
email = models.CharField(max_length=100)
class Meta:
indexes = [
models.Index(fields=['username'], name='username_idx'),
models.Index(fields=['email'], name='email_idx')
]
Overriding Model Methods:
وقتی در Django یک مدل ایجاد میکنید، میتوانید رفتارهای خاصی را برای عملیاتهای مختلف مدل، مانند ذخیرهسازی یا حذف، سفارشیسازی کنید. این کار به شما این امکان را میدهد که قبل یا بعد از انجام یک عملیات، کارهای خاصی انجام دهید. شما میتوانید عملیات save , delete ,.... رو بازنویسی کنید.
Example:
class MyModel(models.Model):
name = models.CharField(max_length=100)
def save(self, *args, **kwargs):
self.name = self.name.upper()
super().save(*args, **kwargs)
در این مثال، هر زمان که یک نمونه از MyModel ذخیره میشود، مقدار فیلد name به حروف بزرگ تبدیل میشود قبل از ذخیرهسازی و سپس عملیات ذخیرهسازی انجام میشود.
Soft Deletion:
استفاده از Soft Deletion به شما این امکان را میدهد که آیتمها را به عنوان حذف شده علامتگذاری کنید، اما در واقع آنها را از پایگاه داده حذف نکنید. به این تکنیک "حذف نرم" یا "حذف موقت" نیز گفته میشود. این روش برای نگهداری تاریخچه دادهها، امکان بازگردانی آیتمهای حذف شده و همچنین حفظ ارتباطات بین آیتمهای مختلف مفید است.
Example:
class SoftDeleteModel(models.Model):
is_deleted = models.BooleanField(default=False)
def delete(self, *args, **kwargs):
self.is_deleted = True
self.save()
هر یک از این تکنیک ها مجموعه ای از مزایای خاص خود را ارائه می دهد و می تواند به طور قابل توجهی بر کارایی و عملکرد پروژه های شما تأثیر بگذارد. با اجرای این استراتژیها، میتوانید از قابلیتهای قدرتمند مدلسازی جنگو برای ساخت برنامههای کاربردی وب قویتر و مقیاسپذیرتر بهره ببرید.
منبع
#djnago
#model
#mahyar
🌟Code with MrCoder7️⃣0️⃣1️⃣
Advanced Django Models Tips and Tricks #django - 🌟Code with MrCoder7️⃣0️⃣1️⃣
Elevate your Django skills with these advanced tips and tricks for optimizing models. Learn about inheritance, indexing, custom managers, and other techniques to improve your application's performance and scalability.
👍1
بچه ها ویدیوهای آموزشی الگوریتم که آقا سجاد اماده کرده رو حتما ببینید به شدت توی فهم ساختارهای برنامه نویسی کمک میکنه