Forwarded from DevAcademy
Big O
من بحث Big O رو با این ویدیو ZTM یاد گرفتم و همیشه به اطرافیانم توصیه میکنم که کورس الگوریتم ZTM ببینن. اگر دوست دارید یه بارم هم شده این بحث رو درک کنید، یه سر به این لینک بزنید و این ویدیو رو تا اخر نگاه کنید و اگر براتون قابل فهم بود با بقیه هم share کنید.
داخل این لینک علاوه بر ویدیو، چیت شیت big o هم قرار داره که میتونه بهتون کمک کنه راحت تر تو ذهنتون بمونه
https://zerotomastery.io/cheatsheets/big-o-cheat-sheet/?utm_source=udemy&utm_medium=coursecontent
💻@DevAcaademy
💬@DevAcademyGroup
من بحث Big O رو با این ویدیو ZTM یاد گرفتم و همیشه به اطرافیانم توصیه میکنم که کورس الگوریتم ZTM ببینن. اگر دوست دارید یه بارم هم شده این بحث رو درک کنید، یه سر به این لینک بزنید و این ویدیو رو تا اخر نگاه کنید و اگر براتون قابل فهم بود با بقیه هم share کنید.
داخل این لینک علاوه بر ویدیو، چیت شیت big o هم قرار داره که میتونه بهتون کمک کنه راحت تر تو ذهنتون بمونه
https://zerotomastery.io/cheatsheets/big-o-cheat-sheet/?utm_source=udemy&utm_medium=coursecontent
💻@DevAcaademy
💬@DevAcademyGroup
Zero To Mastery
Big O Cheat Sheet + PDF + Free Tutorial Videos | Zero To Mastery
Learn Big O to become a better developer. This Big O Cheat Sheet (+ PDF version) covers the key points you need to remember for a coding interview.
Forwarded from Ninja Learn | نینجا لرن
راستی دوستان من کتاب
رو تا فصل ۴ ترجمه کردم
خواستید میتونید با هشتک
پیداشون کنید و استفاده کنید 😊
➖➖➖➖➖➖➖➖➖
Rest api Design rulebook
رو تا فصل ۴ ترجمه کردم
خواستید میتونید با هشتک
#کتاب
پیداشون کنید و استفاده کنید 😊
➖➖➖➖➖➖➖➖➖
🔆 CHANNEL | GROUP
Forwarded from Linuxor ?
یکی توییت زده : من متوجه شدهام که مدلهای زبانی بزرگ (LLMs) مانند Claude و GPT-4o با این پرامپت خیلی خوب کار میکنند؛ این پرامپت آنها را وادار میکند تا قبل از ارائه پاسخ نهایی، کمی "تأمل" کنند.
این روش شبیه به پرامپتهاییه که از مدل میخواد فرآیند استدلالش رو توضیح بده. chain-of-thought که توی تحقیقات مرتبط با هوش مصنوعی هم موفقیتآمیز بوده. شما هم میتونین استفاده کنید و نتیجه های بهتری بگیرین در واقع به هوش مصنوعی امکان تصحیح خطای خودش رو میده.
@Linuxor
این روش شبیه به پرامپتهاییه که از مدل میخواد فرآیند استدلالش رو توضیح بده. chain-of-thought که توی تحقیقات مرتبط با هوش مصنوعی هم موفقیتآمیز بوده. شما هم میتونین استفاده کنید و نتیجه های بهتری بگیرین در واقع به هوش مصنوعی امکان تصحیح خطای خودش رو میده.
@Linuxor
Forwarded from a pessimistic researcher (Kc)
حتی یک فریم از این خاطره فراموشم نشد
Forwarded from DevTwitter | توییت برنامه نویسی
چطور با استفاده از custom casts در لاراول دادهها را به شکل دلخواه درآوریم؟
لینک مقاله
@DevTwitter | <Reza Annabestani/>
لینک مقاله
@DevTwitter | <Reza Annabestani/>
Forwarded from Software Engineer Labdon
توافق روی نام گذاری ها از نون شب واجب تره!!
یه جمله جالب توی کتاب clean code دیدم که نوشته بود، زمانی که میخواید توابع یا متغیرهاتون رو نامگذاری کنید اون قدر حساسیت به خرج بدید که انگار دارید برای یک نوزاد تازه به دنیا اومده اسم انتخاب میکنید.
یک نکته که داخل تیم هم خیلی مهمه اینه که برای یک مفهوم، از چند ورب مختلف استفاده نشه. مثلا برای ایجاد کردن فرضا محصول میشه همه ورب های add, create, insert, make, ... رو استفاده کرد. برای اینکه ابهام و سردرگمی پیش نیاد همیشه سعی کنید توی پروژتون برای همه entity ها از یک ورب یکسان استفاده کنید و این رو توی تیمتون هم باهم توافق کنید که همه از اون ورب استفاده کنن.
این مساله به ظاهر کوچیک خیلی خیلی مهمه لطفا رعایت کنید.
| <Pouya Farshidnia/>
➖➖➖➖➖➖➖➖
https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
یه جمله جالب توی کتاب clean code دیدم که نوشته بود، زمانی که میخواید توابع یا متغیرهاتون رو نامگذاری کنید اون قدر حساسیت به خرج بدید که انگار دارید برای یک نوزاد تازه به دنیا اومده اسم انتخاب میکنید.
یک نکته که داخل تیم هم خیلی مهمه اینه که برای یک مفهوم، از چند ورب مختلف استفاده نشه. مثلا برای ایجاد کردن فرضا محصول میشه همه ورب های add, create, insert, make, ... رو استفاده کرد. برای اینکه ابهام و سردرگمی پیش نیاد همیشه سعی کنید توی پروژتون برای همه entity ها از یک ورب یکسان استفاده کنید و این رو توی تیمتون هم باهم توافق کنید که همه از اون ورب استفاده کنن.
این مساله به ظاهر کوچیک خیلی خیلی مهمه لطفا رعایت کنید.
| <Pouya Farshidnia/>
➖➖➖➖➖➖➖➖
https://news.1rj.ru/str/addlist/KpzXaiSpKENkMGM0
Forwarded from Meitix
سه مفهوم بنیادین در دنیای ایزوله سازی در لینوکس 🐧 وجود داره:
1️⃣ cgroup (Control Groups)
این ابزار به لینوکس اجازه میده منابع سیستم (مثل CPU، RAM، دیسک و شبکه) رو مدیریت و محدود کنه. مثلا شما میتونید یه گروه خاص از فرآیندها رو طوری محدود کنید که بیشتر از ۱۰٪ CPU استفاده نکنند. داکر از این قابلیت استفاده میکنه تا مطمئن شه هر کانتینر فقط منابع مشخصی رو مصرف کنه و از دسترس منابع بقیه کانتینرها خارج نشه.
2️⃣ namespace
اNamespace یکی از ستونهای اصلی ایزولهسازی در لینوکسه. این قابلیت به شما اجازه میده یه فرآیند رو در یه فضای ایزوله شده اجرا کنید. مثلا فرآیندهای کانتینر شما فقط فایلسیستم، شبکه، و پروسسهای مخصوص خودشون رو میبینند و به بقیه محیط سیستم دسترسی ندارند. داکر از namespace استفاده میکنه تا حس "ماشین مجازی" بودن رو به کانتینرها بده، در حالی که در واقع همه چیز روی همون کرنل اصلی اجرا میشه.
3️⃣ unionfs
اUnionFS به شما اجازه میده چند لایه فایلسیستم رو روی هم سوار کنید، انگار که یه لایه واحد هستند. این قابلیت برای کانتینرها خیلی کاربردیه چون میتونید یه لایه پایه (مثل فایلسیستم اوبونتو) داشته باشید و تغییرات هر کانتینر رو به صورت جداگانه در یه لایه دیگه ذخیره کنید. این کار باعث صرفهجویی در حافظه و کارایی بهتر میشه.
@meiti_x 💻
1️⃣ cgroup (Control Groups)
این ابزار به لینوکس اجازه میده منابع سیستم (مثل CPU، RAM، دیسک و شبکه) رو مدیریت و محدود کنه. مثلا شما میتونید یه گروه خاص از فرآیندها رو طوری محدود کنید که بیشتر از ۱۰٪ CPU استفاده نکنند. داکر از این قابلیت استفاده میکنه تا مطمئن شه هر کانتینر فقط منابع مشخصی رو مصرف کنه و از دسترس منابع بقیه کانتینرها خارج نشه.
2️⃣ namespace
اNamespace یکی از ستونهای اصلی ایزولهسازی در لینوکسه. این قابلیت به شما اجازه میده یه فرآیند رو در یه فضای ایزوله شده اجرا کنید. مثلا فرآیندهای کانتینر شما فقط فایلسیستم، شبکه، و پروسسهای مخصوص خودشون رو میبینند و به بقیه محیط سیستم دسترسی ندارند. داکر از namespace استفاده میکنه تا حس "ماشین مجازی" بودن رو به کانتینرها بده، در حالی که در واقع همه چیز روی همون کرنل اصلی اجرا میشه.
3️⃣ unionfs
اUnionFS به شما اجازه میده چند لایه فایلسیستم رو روی هم سوار کنید، انگار که یه لایه واحد هستند. این قابلیت برای کانتینرها خیلی کاربردیه چون میتونید یه لایه پایه (مثل فایلسیستم اوبونتو) داشته باشید و تغییرات هر کانتینر رو به صورت جداگانه در یه لایه دیگه ذخیره کنید. این کار باعث صرفهجویی در حافظه و کارایی بهتر میشه.
@meiti_x 💻
Forwarded from Meitix
اینا core foundation داکره😅
داکر خودش تکنولوژیهای زیرساختی مثل namespace و cgroup رو اختراع نکرده، اما قدرتش در اینه که این ابزارهای پراکنده رو در قالب یک پلتفرم یکپارچه، کاربرپسند و نوآورانه ارائه داده. نوآوری داکر بیشتر در تجربه کاربری، قابلیت انتقالپذیری و سادهسازی فرایندهای پیچیدهست مثل ایجاد نتورک یا مدیریت volume هاست، نه در ایجاد ابزارهای کاملاً جدید.
و قسمت خیلی مهم تر اینه که ممکنه داکر رو با vm یکی بدونیم ولی فرقشون خیلی هست
@meiti_x 💻
داکر خودش تکنولوژیهای زیرساختی مثل namespace و cgroup رو اختراع نکرده، اما قدرتش در اینه که این ابزارهای پراکنده رو در قالب یک پلتفرم یکپارچه، کاربرپسند و نوآورانه ارائه داده. نوآوری داکر بیشتر در تجربه کاربری، قابلیت انتقالپذیری و سادهسازی فرایندهای پیچیدهست مثل ایجاد نتورک یا مدیریت volume هاست، نه در ایجاد ابزارهای کاملاً جدید.
و قسمت خیلی مهم تر اینه که ممکنه داکر رو با vm یکی بدونیم ولی فرقشون خیلی هست
@meiti_x 💻
Forwarded from DevTwitter | توییت برنامه نویسی
Forwarded from DevTwitter | توییت برنامه نویسی
یک برنامهنویس با تجربه به این 17 مورد توجه مینماید:
0- عاشق کدی که نوشتی نشو، همیشه باید سعی کنی بهترش کنی
1- در شرایط اورژانسی میفهمی پیچیدگی الکی درست کردن چطوری پاره میکند
2- هر روش و تکنولوژی بالاخره مزایا و معایب خودش را دارد و قطعاً هر چیزی Trade-off های خودش را دارد - حواست باشد، بهترینی وجود ندارد
3- هر خط کدی که مینویسی برای کسی یا جایی یک سرمایه است - شاید هم برای خودت
4- همه میگن کدهای بقیه کثافت است
5- بیخودی Dependency ایجاد نکنید
6- درست کد بنویسید، دعوا و درگیری و متوجه نشدن کم میشود
7- حالا یکم Comment بنویسید، جای دوری نمیرود، ولی کد خودش باید کامنت خودش باشد
8- سر یاد گرفتن چیزهای جدید مقاومت نکنید، لازم است
9- از Code Review نترسید، سبب انتشار و Share شدن دانش میگردد
10- همیشه maintainability را در نظر داشته باشید - شما در حال سیمانریزی و ایجاد یک چیزی که هرگز دست نخورد نیستید
11- جایی لازم بود، کمک بگیرید
12 - اصل مشکل را در کد حل کنید نه فقط یک جنبه از خطا را
13- هیچ پروژه و برنامهای خلاص نخواهد شد، همیشه هست
14- زمانبندی دادن با قول دادن و قسم خوردن یکی نیست، فقط یک احتمال است
15- طراحی و مهندسی سیستم را همان ابتدا مستند سازی کنید
16- پروژه را بدهید بیرون سریع، بعد آرام آرام با یک برنامه مشخص کاملش کنید
@DevTwitter | <Ali Kolahdoozan/>
0- عاشق کدی که نوشتی نشو، همیشه باید سعی کنی بهترش کنی
1- در شرایط اورژانسی میفهمی پیچیدگی الکی درست کردن چطوری پاره میکند
2- هر روش و تکنولوژی بالاخره مزایا و معایب خودش را دارد و قطعاً هر چیزی Trade-off های خودش را دارد - حواست باشد، بهترینی وجود ندارد
3- هر خط کدی که مینویسی برای کسی یا جایی یک سرمایه است - شاید هم برای خودت
4- همه میگن کدهای بقیه کثافت است
5- بیخودی Dependency ایجاد نکنید
6- درست کد بنویسید، دعوا و درگیری و متوجه نشدن کم میشود
7- حالا یکم Comment بنویسید، جای دوری نمیرود، ولی کد خودش باید کامنت خودش باشد
8- سر یاد گرفتن چیزهای جدید مقاومت نکنید، لازم است
9- از Code Review نترسید، سبب انتشار و Share شدن دانش میگردد
10- همیشه maintainability را در نظر داشته باشید - شما در حال سیمانریزی و ایجاد یک چیزی که هرگز دست نخورد نیستید
11- جایی لازم بود، کمک بگیرید
12 - اصل مشکل را در کد حل کنید نه فقط یک جنبه از خطا را
13- هیچ پروژه و برنامهای خلاص نخواهد شد، همیشه هست
14- زمانبندی دادن با قول دادن و قسم خوردن یکی نیست، فقط یک احتمال است
15- طراحی و مهندسی سیستم را همان ابتدا مستند سازی کنید
16- پروژه را بدهید بیرون سریع، بعد آرام آرام با یک برنامه مشخص کاملش کنید
@DevTwitter | <Ali Kolahdoozan/>
Forwarded from IRCF | اینترنت آزاد برای همه
وزیر علوم از درخواست به وزارت ارتباطات برای بازگشایی یوتیوب برای اساتید و دانشجویان خبر داد.
این درخواست از وزارت ارتباطات درحالی است که پیش از این ستار هاشمی گفته بود اعتقادی به #اینترنت_طبقاتی ندارد.
© fanzyMag
🔍 ircf.space
@ircfspace
این درخواست از وزارت ارتباطات درحالی است که پیش از این ستار هاشمی گفته بود اعتقادی به #اینترنت_طبقاتی ندارد.
© fanzyMag
🔍 ircf.space
@ircfspace
Forwarded from IRCF | اینترنت آزاد برای همه
با وجود تکذیب ارتباط وزارت ارتباطات با ارائه #اینترنت_طبقاتی برای دانشجویان و اساتید از سوی مدیر روابط عمومی اینوزارتخانه و تأکید بر اینکه اینموضوع بر اساس توافق میان وزارت علوم و دادستانی و مطابق با آییننامه کارگروه تعیین مصادیق انجام شده، شواهد نشان میدهد که اینترنت طبقاتی همچنان در قالب پروژههای کوچکتر درحال اجراست.
© filterbaan
🔍 ircf.space
@ircfspace
© filterbaan
🔍 ircf.space
@ircfspace
Forwarded from کانال مهرداد لینوکس (Mehrdad Linux)
⁉️برای "تغییر نام فایل" مخصوصا به صورت دسته ای و گروهی در لینوکس از چه ابزاری استفاده میکنید ؟
ابزار های mv،rename خوب هستند
✅ ولی تا به حال ابزار mmv یا گرافیکی مثل Bulky را امتحان کردید ؟
💠 ابزار گرافیکی Bulky
در بیشتر میزکارها Cinnamon, MATE, GNOME, Xfce و ... به صورت پیشفرض نصب است
پشتیبانی بسیار عالی از regex و انواع Pattern داره
کافیه فایل ها را به صورت گروهی انتخاب کنید و دکمه Rename را بزنید
💠 ابزار mmv یا multiple move
در اکثر نصاب ها مثل apt یا yum یا pacman , ... به نام mmv هست
پیشنهاد شما ؟
❤️ ممنون از حمایت هاتون 💐🌺
#linux
ابزار های mv،rename خوب هستند
✅ ولی تا به حال ابزار mmv یا گرافیکی مثل Bulky را امتحان کردید ؟
برای Rename گروهی فایل ها استفاده از regex یا Pattern کار را ساده میکنه
یک بار دستور را میزنید و تمام n فایل شما با الگوی از قبل تعریف شده شما تغییر نام پیدا میکنند
💠 ابزار گرافیکی Bulky
در بیشتر میزکارها Cinnamon, MATE, GNOME, Xfce و ... به صورت پیشفرض نصب است
پشتیبانی بسیار عالی از regex و انواع Pattern داره
کافیه فایل ها را به صورت گروهی انتخاب کنید و دکمه Rename را بزنید
💠 ابزار mmv یا multiple move
در اکثر نصاب ها مثل apt یا yum یا pacman , ... به نام mmv هست
mmv [options] source_pattern target_pattern الگوی کلی
mmv '*.txt' '#1.md' مثال
mmv 'file*.txt' 'document#1.txt' استفاده Pattern
mmv '*.jpg' '2025_#1.jpg' استفاده Prefix یا Suffix
mmv 'data_0*.txt' 'data_#1.txt' استفاده wildcard patterns
mmv -r '*.txt' '#1.txt' برای دایرکتوری
پیشنهاد شما ؟
❤️ ممنون از حمایت هاتون 💐🌺
#linux
Forwarded from Ninja Learn | نینجا لرن
تو پست بعدی درمورد این میخوام حرف بزنم که چرا بعضی ها میگن پایتون شی گرا نیست
Forwarded from DevTwitter | توییت برنامه نویسی
توی یه پست تازه توی Medium درباره تستهای Benchmark توی Go نوشتم.
توی این پست، یه توضیح کامل و کاربردی دادم که تستهای Benchmark دقیقاً چیا هستن و کجا به درد میخورن. برای درک بهتر موضوع، یه تست ساده هم برای محاسبه فاکتوریل نوشتیم و نتایج رو بررسی کردیم.
https://medium.com/@debug-ing/benchmark-testing-in-go-a-practical-guide-2900e008ce43
@DevTwitter | <Mahdi Mohammadi/>
توی این پست، یه توضیح کامل و کاربردی دادم که تستهای Benchmark دقیقاً چیا هستن و کجا به درد میخورن. برای درک بهتر موضوع، یه تست ساده هم برای محاسبه فاکتوریل نوشتیم و نتایج رو بررسی کردیم.
https://medium.com/@debug-ing/benchmark-testing-in-go-a-practical-guide-2900e008ce43
@DevTwitter | <Mahdi Mohammadi/>
🔥1
Forwarded from Meitix
داکر همون VM نیست!
واقعیت اینه که اینا دو تا مفهوم کاملاً متفاوتن. ماشین مجازی یه سیستمعامل کامله که روی یه نرمافزار مثل VMware یا VirtualBox اجرا میشه. این یعنی هر VM برای خودش یه سیستمعامل جدا داره، کرنل خودش رو اجرا میکنه و منابع سختافزاری مثل CPU و رم رو شبیهسازی میکنه. همین کار باعث میشه VMها نسبتاً سنگین باشن و زمان زیادی برای بوت شدنشون لازم باشه.
اما داکر یه چیز دیگهست. کانتینرهای داکر به جای داشتن سیستمعامل مستقل، از همون کرنل سیستمعامل میزبان استفاده میکنن. این یعنی وقتی شما یه کانتینر داکر رو اجرا میکنید، فقط اپلیکیشن و فایلهای مورد نیازش رو میاره، نه یه سیستمعامل کامل. همین موضوع باعث میشه کانتینرها خیلی سبکتر و سریعتر باشن.
از نظر کاربرد هم تفاوت زیادی دارن. ماشینهای مجازی بیشتر برای اجرای سیستمعاملهای مختلف روی یه سختافزار استفاده میشن، مثلاً اگه بخواید ویندوز و لینوکس رو کنار هم داشته باشید. ولی داکر برای ایزولهسازی و اجرای سریع اپلیکیشنها طراحی شده. شما میتونید یه اپلیکیشن رو با تمام وابستگیهاش توی یه کانتینر اجرا کنید، بدون اینکه نگران تداخل با بقیه برنامهها باشید.
پس دفعه بعد که کسی گفت داکر همون VMه، با خیال راحت توضیح بدید که داکر سبکه، سریعتره و هدفش اجرای اپلیکیشنهاست، نه شبیهسازی سختافزار. 🚀
@meiti_x 💻
واقعیت اینه که اینا دو تا مفهوم کاملاً متفاوتن. ماشین مجازی یه سیستمعامل کامله که روی یه نرمافزار مثل VMware یا VirtualBox اجرا میشه. این یعنی هر VM برای خودش یه سیستمعامل جدا داره، کرنل خودش رو اجرا میکنه و منابع سختافزاری مثل CPU و رم رو شبیهسازی میکنه. همین کار باعث میشه VMها نسبتاً سنگین باشن و زمان زیادی برای بوت شدنشون لازم باشه.
اما داکر یه چیز دیگهست. کانتینرهای داکر به جای داشتن سیستمعامل مستقل، از همون کرنل سیستمعامل میزبان استفاده میکنن. این یعنی وقتی شما یه کانتینر داکر رو اجرا میکنید، فقط اپلیکیشن و فایلهای مورد نیازش رو میاره، نه یه سیستمعامل کامل. همین موضوع باعث میشه کانتینرها خیلی سبکتر و سریعتر باشن.
از نظر کاربرد هم تفاوت زیادی دارن. ماشینهای مجازی بیشتر برای اجرای سیستمعاملهای مختلف روی یه سختافزار استفاده میشن، مثلاً اگه بخواید ویندوز و لینوکس رو کنار هم داشته باشید. ولی داکر برای ایزولهسازی و اجرای سریع اپلیکیشنها طراحی شده. شما میتونید یه اپلیکیشن رو با تمام وابستگیهاش توی یه کانتینر اجرا کنید، بدون اینکه نگران تداخل با بقیه برنامهها باشید.
پس دفعه بعد که کسی گفت داکر همون VMه، با خیال راحت توضیح بدید که داکر سبکه، سریعتره و هدفش اجرای اپلیکیشنهاست، نه شبیهسازی سختافزار. 🚀
@meiti_x 💻
Forwarded from Ninja Learn | نینجا لرن
خب خب خب شیگرایی در پایتون🚀
شیگرایی تو پایتون فقط محدود به تعریف کلاسها و متدهای ساده نیست. این زبان امکانات پیشرفتهتری هم داره که با یاد گرفتنشون میتونید کدهای بهینهتر، استانداردتر و انعطافپذیرتری بنویسید. بیاید چند تا از این مفاهیم رو بررسی کنیم.
1⃣ متاکلاسها🕵️♂️
متاکلاسها این امکان رو میدن که قبل از ایجاد یک کلاس، ساختارش رو کنترل کنی. میتونی مطمئن شی که قوانین خاصی رعایت شدن یا حتی رفتار کلاس رو دستکاری کنی.
مثال:
اطمینان از تعریف متد greet در کلاس
💡 چی شد؟
ترکیب یا Composition یک راه انعطافپذیرتر برای ساختار دادن به کلاسهات هست. این روش بهت کمک میکنه وابستگیها رو کم کنی و کدهات قابل نگهداریتر باشن.
مثال: تعریف ماشین با استفاده از موتور
💡 چی شد؟
ویژگی های (attributes) هر آبجکت در پایتون به صورت پیشفرض در یک دیکشنری ذخیره میشن که حافظه زیادی مصرف میکنه. با slots میتونی این دیکشنری رو حذف کنی و مصرف حافظه رو کاهش بدی.
مثال: استفاده از slots برای بهینهسازی
💡 چی شد؟
4⃣ Abstract Base Classes 🎯
کلاسهای پایه انتزاعی (ABC) تضمین میکنن که کلاسهای فرزند متدهای مشخصی رو پیادهسازی کنن. این کار طراحی رو مطمئنتر و کدها رو خواناتر میکنه.
مثال: طراحی یک کلاس پایه برای اشکال هندسی
💡 چی شد؟
جمعبندی ✍
این نکات فقط نوک کوه یخه اگه میخوای عمیق تر بشی، کتاب Fluent Python یکی از بهترین منابعه.
➖➖➖➖➖➖➖➖➖
شیگرایی تو پایتون فقط محدود به تعریف کلاسها و متدهای ساده نیست. این زبان امکانات پیشرفتهتری هم داره که با یاد گرفتنشون میتونید کدهای بهینهتر، استانداردتر و انعطافپذیرتری بنویسید. بیاید چند تا از این مفاهیم رو بررسی کنیم.
1⃣ متاکلاسها🕵️♂️
متاکلاسها این امکان رو میدن که قبل از ایجاد یک کلاس، ساختارش رو کنترل کنی. میتونی مطمئن شی که قوانین خاصی رعایت شدن یا حتی رفتار کلاس رو دستکاری کنی.
مثال:
اطمینان از تعریف متد greet در کلاس
class Meta(type):
def __new__(cls, name, bases, dct):
# Ensure 'greet' method exists in the class
if 'greet' not in dct:
raise TypeError(f"Class '{name}' must define 'greet' method")
return super().__new__(cls, name, bases, dct)
class MyClass(metaclass=Meta):
def greet(self):
return "Hello, world!"
obj = MyClass()
print(obj.greet()) # Output: Hello, world!
💡 چی شد؟
متاکلاس Meta بررسی میکنه که متد greet توی هر کلاسی که ازش استفاده میکنه، حتماً تعریف شده باشه. با این کار، خطاها زودتر شناسایی میشن و کدت تمیزتر میمونه.2⃣ Composition به جای ارثبری 🔗
ترکیب یا Composition یک راه انعطافپذیرتر برای ساختار دادن به کلاسهات هست. این روش بهت کمک میکنه وابستگیها رو کم کنی و کدهات قابل نگهداریتر باشن.
مثال: تعریف ماشین با استفاده از موتور
class Engine:
def start(self):
return "Engine started"
class Car:
def __init__(self):
self.engine = Engine() # Engine is a part of Car
def start(self):
return self.engine.start() # Delegate starting to Engine
car = Car()
print(car.start()) # Output: Engine started
💡 چی شد؟
به جای این که ماشین از موتور ارثبری کنه، موتور به عنوان یک جزء در ماشین ترکیب شده. این یعنی موتور رو میتونی راحت عوض کنی بدون این که ساختار کلی ماشین به مشکل بخوره.3⃣ بهینهسازی حافظه با slots 🧠
ویژگی های (attributes) هر آبجکت در پایتون به صورت پیشفرض در یک دیکشنری ذخیره میشن که حافظه زیادی مصرف میکنه. با slots میتونی این دیکشنری رو حذف کنی و مصرف حافظه رو کاهش بدی.
مثال: استفاده از slots برای بهینهسازی
class MyClass:
__slots__ = ['name', 'age'] # Restrict attributes to these two
obj = MyClass()
obj.name = "Alice"
obj.age = 25
💡 چی شد؟
ویژگیهای آبجکت فقط محدود به name و age هستن و هیچ فضای اضافی برای دیکشنری داخلی استفاده نمیشه. این روش توی سیستمهایی با تعداد آبجکت زیاد، تفاوت بزرگی ایجاد میکنه.
4⃣ Abstract Base Classes 🎯
کلاسهای پایه انتزاعی (ABC) تضمین میکنن که کلاسهای فرزند متدهای مشخصی رو پیادهسازی کنن. این کار طراحی رو مطمئنتر و کدها رو خواناتر میکنه.
مثال: طراحی یک کلاس پایه برای اشکال هندسی
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
"""Calculate the area of the shape"""
pass
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2 # Area formula for a circle
circle = Circle(5)
print(circle.area()) # Output: 78.5
💡 چی شد؟
کلاس Shape تضمین میکنه که همهی اشکال فرزند متد area رو داشته باشن. بدون این متد، ساختن کلاس فرزند امکانپذیر نیست.
جمعبندی ✍
این نکات فقط نوک کوه یخه اگه میخوای عمیق تر بشی، کتاب Fluent Python یکی از بهترین منابعه.
#programming #python #oop
➖➖➖➖➖➖➖➖➖
🔆 CHANNEL | GROUP
O’Reilly Online Learning
Fluent Python
Python’s simplicity lets you become productive quickly, but this often means you aren’t using everything it has to offer. With this hands-on guide, you’ll learn how to write... - Selection from Fluent Python [Book]