Python Hints
یکی از پروژهها رو جابجا کردیم و اینطوری شد که: بجای docker از podman استفاده بشه بجای docker swarm, docker stack, ... هم از k8s استفاده بشه ی مقدار قبلتر هم که همگی روی ruff و mypy رفته بودیم و pre-commit رو اینطوری تنظیم کردیم. دیگه یکی از هم تیمیها…
دستورات مهم uv, چون درموردش ازم پرسیدید.
تمام پروژههای خودم رو بردم روی این مورد؛ و اکثر پروژههای شرکت که مسئولیت تیم نگهداری و توسعهاش با من هست.
برای دپلویها هم، از
تمام پروژههای خودم رو بردم روی این مورد؛ و اکثر پروژههای شرکت که مسئولیت تیم نگهداری و توسعهاش با من هست.
برای دپلویها هم، از
uv
تو مرحله build
روی Docker
استفاده میکنم👍13❤2
تا همین ماه پیش هم اگر از من راجب کتاب داکر میپرسید، نسخه اول کتاب
رو معرفی میکردم؛ نوشتار فوقالعاده و جزئیات به اندازه کافی و البته تصاویر خوب برای انقال نکات مهم.
توی کسانی که نسخه اول رو بهشون معرفی کردم، ندیدم کسی کتاب رو بخونه و درک اشتباه از عملکرد داکر داشته باشه.
حالا نسخه دوم کتاب معرفی شده (برای اونایی که بهونهاشون تغییر دستورات بود)
شخصاً هنوز فرصت نکردم بخونم، اما یک مرور سریع کردم و بنظرم ازین به بعد باید این نسخه رو دنبال کرد.
(راستی قابلیت استوری گذاشتن کانال رو از دست دادیم، اگر کتابهایی که قبلتر معرفی شدند رو خواستید روی اسم کانال بزنید و وارد بخش
#Book@pyHints
Docker in a month of lunches
رو معرفی میکردم؛ نوشتار فوقالعاده و جزئیات به اندازه کافی و البته تصاویر خوب برای انقال نکات مهم.
توی کسانی که نسخه اول رو بهشون معرفی کردم، ندیدم کسی کتاب رو بخونه و درک اشتباه از عملکرد داکر داشته باشه.
حالا نسخه دوم کتاب معرفی شده (برای اونایی که بهونهاشون تغییر دستورات بود)
شخصاً هنوز فرصت نکردم بخونم، اما یک مرور سریع کردم و بنظرم ازین به بعد باید این نسخه رو دنبال کرد.
(راستی قابلیت استوری گذاشتن کانال رو از دست دادیم، اگر کتابهایی که قبلتر معرفی شدند رو خواستید روی اسم کانال بزنید و وارد بخش
posts
بشید)#Book@pyHints
❤41👍10
Python Hints
اومدم یک تولز معرفی کنم و برم : من حدودا ۲ سالی میشه که Postman ندارم؛ از وقتی که لاگین و Sync و ... کم کم اجباری شد (احمقانه) ی مدت طولانی رفتم روی کد پایتون؛ یک بخشی داشتم به اسم api client توی اکثر کدهام که خودش ی پروژه کنار پروژه اصلی میشه ( کارفرما و…
Bruno
نسخه
vscode-extension
رو هم منتشر کرد.🔥23
توی معماری سیستم یک اصطلاحی داریم به اسم؛
که خب یک
معماری سیستم مثلاً قرار بوده micro-service باشه؛ در نگاه اول هم هست و حتی از تمام ابزارهای لازم هم داره استفاده میشه اما به اشتباه.
کل سیستم رو امروز کنار هم چیدم و روی یک سرور بالا آوردم (بجای چندتا سرور) و تبدیلش کردم به
البته من مطمئن بودم که اینطوری میشه به سه دلیل :
۱- به وضوح
۲- تعداد درخواستهای بین سرویسها زیاد بود
۳- خیلی از زمان پروفایلنگ، برای درخواست بین سرویسها هدر میرفت روی نتورک. (که خب حتی
این موضوع دلیلی شد؛ بیام چندتا تعریف اشتباه که دائم میشنوم رو انتقال بدم:
۱- توی ماکروسرویس هر سرویس باید دیتابیس جدا داشته باشه.
این تعریف درسته، اما تفسیر غلط ازش زیاده؛ مثلاً ۹۹٪ فکر میکنند این یعنی برای هر سرویس باید یک سرور
مثلاً سرویس
۲- هر تابع، متد یا ... باید
بله درسته، این یکی از موارد مهم هست اما تفسیر اشتباه ازش زیاده، مثلاً:
فرض کنید سرویس payment بالا، بعد از اینکه پرداخت انجام شد باید به بخش انبارداری تیکت بزنیم که پرداخت موفق بوده موجودی رو کم کن، به بخش حسابداری بزنیم که فاکتور صادر شده پرداخت شد و مثلاً به بخش ارسال کالا هم بگیم چیو بستهبندی و ارسال کنه به چه آدرسی ...
اینو دیدم که میگم، به طرف میگم، خب عالی توابع اینکارها رو بذار یکجا داخل یک تابع و درخواست بده اگر مشکلی توی پرداخت پیش اومد همه باهم باید
یک ساعت داشتم براش توضیح میدم؛ که این تابع SRP رو رعایت میکنه چون تو فقط داری میگی من پول رو پرداخت کردم موفق بود یا نه.
۳- ماکروسرویس بهتره ...
نه چون یک چیزی سختتر هست پیادهسازیش لزوماً بهتر نیست، بسیار بسیار پروژه دیدم که گفتم خب همهی چیزایی که اینا لازم دارن اگر
چندتا برداشت اشتباه دیگه هم بود که متأسفانه یادم نیست دیگه، ولی تبدیل سیستم به یک
حتی برای مرحله بعدی هم پیشنهاد کردم اول سراغ
و بالا آوردن چندتا
نهایتاً؛ البته من میدونم خیلی از این برداشتهای اشتباه از کجا میاد.
منابع ترجمه شده به فارسی.
ترجمه اشتباه لغوی یک کلمه، باعث میشه معنی یک جمله بطور کامل عوض بشه.
distributed monolithic
که خب یک
anti-pattern
هست برای معماری micro-service
اول هفته با یک شرکتی برای مشاوره صحبت کردیم (کارشون رو قبول نکردم ولی یک قرارداد کوچک بستم برای اینکه بگم مشکل فعلی سیستم کجاس) معماری سیستم مثلاً قرار بوده micro-service باشه؛ در نگاه اول هم هست و حتی از تمام ابزارهای لازم هم داره استفاده میشه اما به اشتباه.
کل سیستم رو امروز کنار هم چیدم و روی یک سرور بالا آوردم (بجای چندتا سرور) و تبدیلش کردم به
multi app monolithic
اولش خیلی ناراحت و نگران بودند که پرفورمنس خراب میشه و ازین حرفا ولی بعد توی تستها دیدند که حداقل ۲ برابر سرعت پاسخ و تعداد درخواستهایی که هندل میشه بیشتره.البته من مطمئن بودم که اینطوری میشه به سه دلیل :
۱- به وضوح
anti pattern
رو میدیدم۲- تعداد درخواستهای بین سرویسها زیاد بود
۳- خیلی از زمان پروفایلنگ، برای درخواست بین سرویسها هدر میرفت روی نتورک. (که خب حتی
async
هم نبود که حداقل cpu هدر نره) این موضوع دلیلی شد؛ بیام چندتا تعریف اشتباه که دائم میشنوم رو انتقال بدم:
۱- توی ماکروسرویس هر سرویس باید دیتابیس جدا داشته باشه.
این تعریف درسته، اما تفسیر غلط ازش زیاده؛ مثلاً ۹۹٪ فکر میکنند این یعنی برای هر سرویس باید یک سرور
Postgres
جدا داشته باشند، نه لزوماً مفهوم این تعریف اینه که: مثلاً سرویس
auth
شما نره دیتای سرویس payment
رو بخونه حتی اگر جفتشون روی یک دیتابیس هستند (فقط دوتا تیبل جداشده) و برای گرفتن دیتای مورد نیازش به سرویس payment
درخواست بده۲- هر تابع، متد یا ... باید
single responsibility
داشته باشه.بله درسته، این یکی از موارد مهم هست اما تفسیر اشتباه ازش زیاده، مثلاً:
فرض کنید سرویس payment بالا، بعد از اینکه پرداخت انجام شد باید به بخش انبارداری تیکت بزنیم که پرداخت موفق بوده موجودی رو کم کن، به بخش حسابداری بزنیم که فاکتور صادر شده پرداخت شد و مثلاً به بخش ارسال کالا هم بگیم چیو بستهبندی و ارسال کنه به چه آدرسی ...
اینو دیدم که میگم، به طرف میگم، خب عالی توابع اینکارها رو بذار یکجا داخل یک تابع و درخواست بده اگر مشکلی توی پرداخت پیش اومد همه باهم باید
rollback
بخوره (توجه به بحث قبل شما حق نداری، تیبل سرویسهای دیگه رو دستکاری کنی)؛ برگشته میگه پس Single Responsiblity
چی میشه ؟یک ساعت داشتم براش توضیح میدم؛ که این تابع SRP رو رعایت میکنه چون تو فقط داری میگی من پول رو پرداخت کردم موفق بود یا نه.
۳- ماکروسرویس بهتره ...
نه چون یک چیزی سختتر هست پیادهسازیش لزوماً بهتر نیست، بسیار بسیار پروژه دیدم که گفتم خب همهی چیزایی که اینا لازم دارن اگر
monolithic
بود، هم سریعتر بود هم سرعت توسعهاش بیشتر بود هم نیاز به این همه دولوپر نداشت.چندتا برداشت اشتباه دیگه هم بود که متأسفانه یادم نیست دیگه، ولی تبدیل سیستم به یک
monolithic
واقعی توی این پروژه نتایج خیلی بهتری داشت.حتی برای مرحله بعدی هم پیشنهاد کردم اول سراغ
Load balance
و بالا آوردن چندتا
instance
از همین monolithic
برند، بعد برای تبدیل به micro-sercive از یکی که معماری رو واقعاً بلد هست کمک بگیرند نه کسی که پوشه پوشه کردن فایلای پایتونش رو فقط یاد گرفته.نهایتاً؛ البته من میدونم خیلی از این برداشتهای اشتباه از کجا میاد.
منابع ترجمه شده به فارسی.
ترجمه اشتباه لغوی یک کلمه، باعث میشه معنی یک جمله بطور کامل عوض بشه.
👍40❤11👏2
#توضیح
خیلی وقتا بهم میگن؛ این چیزایی که میگی و تأکید میکنی روش برای کسی که تازه شروع کرده یا داره شروع میکنه خوب نیست، دست انداز میشه دلزده میشه و ....
اولاً من اینارو برای بچههای سطح بالاتر میگم؛ برای تازهکار شنیدنش خوبه ولی لزومی نداره روز اول بره سراغ این موارد.
ولی خب
یک مثال ساده میزنم همه درک کنند؛ زبان انگلیسی خوندن بچههای کوچیک رو دیدید ؟ زیر ۸ سال رو منظورم هست.
اگر سر کلاساشون نشسته باشید، هیچوقت درس دادن گرامر انگلیسی رو نمیبینید! گرامر جزو موارد سخت هست، چیز سخت دلزده میکنه بچه رو
ولی
این دلیل نمیشه معلم گرامر اشتباه استفاده کنه؛ توی طول آموزش بچه گرامر نخونده اصلا ولی موقع صحبت کردن از گرامر درست استفاده میکنه، حتی بعد چند ترم بدون خوندن گرامر پترن گرامر اشتباه رو هم یاد گرفته و اگر جلوش اشتباه بگی بهت میخنده
تست کنید 👆
داستان گیر دادن من هم همین هست؛ کسی که آموزش میده لزومی نداره تمام موارد و جزئیات رو به یک تازهکار بگه اما همین که توی آموزشش اشتباه نگه و از حالات درست استفاده کنه باعث میشه ذهن نیرویی که تربیت میکنه آماده باشه.
در نهایت:
همونطوری که خروجی همهی کلاسهای آموزش زبان انگلیسی، مترجمهای برتر ادبیات کلاسیک انگلیسی نیست و حتی ممکنه فقط
ازش در بیاد؛ قرار هم نیست خروجی همه شاگردهای شما
خلاصه؛ اگر حتی مقدمات یک چیزی رو درس میدی، باید اصول و قواعد رو رعایت کنی وگرنه خیانت داری میکنی
خیلی وقتا بهم میگن؛ این چیزایی که میگی و تأکید میکنی روش برای کسی که تازه شروع کرده یا داره شروع میکنه خوب نیست، دست انداز میشه دلزده میشه و ....
اولاً من اینارو برای بچههای سطح بالاتر میگم؛ برای تازهکار شنیدنش خوبه ولی لزومی نداره روز اول بره سراغ این موارد.
ولی خب
یک مثال ساده میزنم همه درک کنند؛ زبان انگلیسی خوندن بچههای کوچیک رو دیدید ؟ زیر ۸ سال رو منظورم هست.
اگر سر کلاساشون نشسته باشید، هیچوقت درس دادن گرامر انگلیسی رو نمیبینید! گرامر جزو موارد سخت هست، چیز سخت دلزده میکنه بچه رو
ولی
این دلیل نمیشه معلم گرامر اشتباه استفاده کنه؛ توی طول آموزش بچه گرامر نخونده اصلا ولی موقع صحبت کردن از گرامر درست استفاده میکنه، حتی بعد چند ترم بدون خوندن گرامر پترن گرامر اشتباه رو هم یاد گرفته و اگر جلوش اشتباه بگی بهت میخنده
تست کنید 👆
داستان گیر دادن من هم همین هست؛ کسی که آموزش میده لزومی نداره تمام موارد و جزئیات رو به یک تازهکار بگه اما همین که توی آموزشش اشتباه نگه و از حالات درست استفاده کنه باعث میشه ذهن نیرویی که تربیت میکنه آماده باشه.
در نهایت:
همونطوری که خروجی همهی کلاسهای آموزش زبان انگلیسی، مترجمهای برتر ادبیات کلاسیک انگلیسی نیست و حتی ممکنه فقط
I am a blackboard
ازش در بیاد؛ قرار هم نیست خروجی همه شاگردهای شما
Dennis Ritchie
باشه، اتفاقاً خیلیهاشون قراره خیلی زود متوجه بشوند اصلا علاقهای به برنامهنویسی ندارند فقط لایک شدن پستای اینستاگرامشون و ویدئو دادن توی یوتیوب براشون مهمهخلاصه؛ اگر حتی مقدمات یک چیزی رو درس میدی، باید اصول و قواعد رو رعایت کنی وگرنه خیانت داری میکنی
❤60👍29👏7
Python Hints
لطفاً پیامهای پین شده کانال رو بطور کامل نگاه کنید، قبل از هرگونه سوال و جواب : 🌹 زحمت این پست رو یکی از اعضا کشیدند 🌹 logging : https://t.iss.one/pyHints/446 https://t.iss.one/pyHints/81 https://t.iss.one/pyHints/127 Dunder methods https://t.iss.one/pyHints/12 https://t.iss.one/pyHints/14…
This media is not supported in your browser
VIEW IN TELEGRAM
❤23
Python Hints
#توضیح خیلی وقتا بهم میگن؛ این چیزایی که میگی و تأکید میکنی روش برای کسی که تازه شروع کرده یا داره شروع میکنه خوب نیست، دست انداز میشه دلزده میشه و .... اولاً من اینارو برای بچههای سطح بالاتر میگم؛ برای تازهکار شنیدنش خوبه ولی لزومی نداره روز اول بره…
من یک پستی روی لینکدین گذاشتم؛ چندروزه برای ارتباط گرفتن با maintainer های یک پروژهای فعالیتم زیاد شده اونجا و کامنت گذاشتن زیر پستها و ... ازم راجب منبع زیاد سوال شد.
خلاصه؛ یک عکس از کتابهایی که اینجا استوری کردم گذاشتم و توضیح دادم که اکثر فعالیتم توی تلگرام هست، آخر اون متن یک چیزی نوشتم:
و کامنتی که هیچوقت جواب داده نشد؛ چندنفر سوال کردند گفتم بازم توضیح بدم:
اول نگاهی به کتابها بندازیم و دستهبندی کنیم اونارو ؟
من کتاب هوش مصنوعی رو توی لینکدین نذاشتم.
کل کتابهایی که معرفی کردم به ۴ دسته تقسیم میشه:
۱- پایتون مقدماتی تا کمی پیشرفته.
مگه میشه ضما زبان برنامهنویسی که کد میزنی رو درست نشناسی ؟
۲- برنامهنویسی async و کمی optimization برای پایتون.
واجب هست؛ چون باعث میشه نسبت به رقبای بازار بهتر باشید
۳- ساختمان داده و الگوریتم؛
هرجای استانداردی که برید مصاحبه فنی حداقل چیزی هست که پرسیده میشه
۴- طراحی و معماری نرمافزار و سیستم
امکان نداره یک سوال هرچند کوچیک و ساده راجب این موضوع ازتون نشه.
پست بعدی
خلاصه؛ یک عکس از کتابهایی که اینجا استوری کردم گذاشتم و توضیح دادم که اکثر فعالیتم توی تلگرام هست، آخر اون متن یک چیزی نوشتم:
این کتابها حداقلهایی هست که باید بخونید تا به خودتون بگید مهندس نرمافزار پایتون!
و کامنتی که هیچوقت جواب داده نشد؛ چندنفر سوال کردند گفتم بازم توضیح بدم:
اول نگاهی به کتابها بندازیم و دستهبندی کنیم اونارو ؟
من کتاب هوش مصنوعی رو توی لینکدین نذاشتم.
کل کتابهایی که معرفی کردم به ۴ دسته تقسیم میشه:
۱- پایتون مقدماتی تا کمی پیشرفته.
مگه میشه ضما زبان برنامهنویسی که کد میزنی رو درست نشناسی ؟
۲- برنامهنویسی async و کمی optimization برای پایتون.
واجب هست؛ چون باعث میشه نسبت به رقبای بازار بهتر باشید
۳- ساختمان داده و الگوریتم؛
هرجای استانداردی که برید مصاحبه فنی حداقل چیزی هست که پرسیده میشه
۴- طراحی و معماری نرمافزار و سیستم
امکان نداره یک سوال هرچند کوچیک و ساده راجب این موضوع ازتون نشه.
پست بعدی
👍36❤14
Python Hints
من یک پستی روی لینکدین گذاشتم؛ چندروزه برای ارتباط گرفتن با maintainer های یک پروژهای فعالیتم زیاد شده اونجا و کامنت گذاشتن زیر پستها و ... ازم راجب منبع زیاد سوال شد. خلاصه؛ یک عکس از کتابهایی که اینجا استوری کردم گذاشتم و توضیح دادم که اکثر فعالیتم توی…
یک نگاهی به مصاحبههای
یا حتی
تمام این موارد حداقلای ها هست ولی در سطوح مختلف از شما پرسیده میشه.
در نهایت؛ فکر میکنم از پستهایی که تا به امروز گذاشته شده همه درک کردید!
من پستهام برای
software engineer
شدن هست و کسایی که شاید بودنشون توی این کانال هم اشتباه باشه؛ اما قطعاً خوشحالیم از اینکه هستند:
۱- انواع و اقسام وایب کدر
۲- بطورکلی تر؛ کدرها
۳- هرکسی که نیازی به درک داشتن از کاری که میکنه نداره و فقط میخواد ی چیزی دمو کنه
درنهایت برای سه مورد خاص هم هیچکدوم از مطالب کتابهای بالا نیاز نیست :
۱- دانشجویی که میخواد از شر تسکهای استاد زودتر راحت بشه.
۲- کارمند دولتی که ۱/۳ شرکت خصوصی حقوق میگیره و مدیرانش هم هیچ درکی از هیچی ندارند.
۳- کسی که ایده خوبی داره و کمتر از ۱-۲ هفته وقت داره برای ارائه ایدهاش
اگر توی این ۲ دسته بندی و ۶ مورد نیستید؛ شرمندهام باور کنید یا نه تأکید میکنم!
کتابهایی که گفتم حداقلهایی هست که باید یاد بگیرید تا بهتون بگن
software engineering
بندازیدیا حتی
mock interview
هایی که موجود هست! تمام این موارد حداقلای ها هست ولی در سطوح مختلف از شما پرسیده میشه.
در نهایت؛ فکر میکنم از پستهایی که تا به امروز گذاشته شده همه درک کردید!
من پستهام برای
software engineer
شدن هست و کسایی که شاید بودنشون توی این کانال هم اشتباه باشه؛ اما قطعاً خوشحالیم از اینکه هستند:
۱- انواع و اقسام وایب کدر
۲- بطورکلی تر؛ کدرها
۳- هرکسی که نیازی به درک داشتن از کاری که میکنه نداره و فقط میخواد ی چیزی دمو کنه
درنهایت برای سه مورد خاص هم هیچکدوم از مطالب کتابهای بالا نیاز نیست :
۱- دانشجویی که میخواد از شر تسکهای استاد زودتر راحت بشه.
۲- کارمند دولتی که ۱/۳ شرکت خصوصی حقوق میگیره و مدیرانش هم هیچ درکی از هیچی ندارند.
۳- کسی که ایده خوبی داره و کمتر از ۱-۲ هفته وقت داره برای ارائه ایدهاش
MVP
داشته باشه که کار کنه اگر توی این ۲ دسته بندی و ۶ مورد نیستید؛ شرمندهام باور کنید یا نه تأکید میکنم!
کتابهایی که گفتم حداقلهایی هست که باید یاد بگیرید تا بهتون بگن
Software Engineer
👍36❤12👏10
Python Hints
پرسیدید چرا نویسنده میگه این مورد
من یک نمونه کد زدم که نشون بدم چرا بد هست این رفتار؛ توی این حالت من بیش از حد سخت گرفتم و همه چیز
اولین و مهمترین نکته :
توجه کنید نویسنده همین رفتار یعنی تعریف مداوم تایپ جدید برای نوع دادههای اصلی رو بد میدونه!
اینکه بجای str, bool, int تایپ جدید تعریف کنید که پارامتر ورودی شما بهتر بنظر برسه!
حالا بررسی کنیم خود ایرادات وارده رو:
۱- تعریف نوع دادهای جدید هیچ عملکرد بهتری برای
خیلی از افرادی که اینکار رو میکنند برای فرار از تست کردن کدها؛ فرار از نوشتن ولیدیشن؛ فرار از چک کردن پارامترهای ورودی و ... اینکار رو میکنند! این چیزی هست که شخصا بسیار توی این مدل کد زدن دیدم (قطعا هستند افرادی که اینطوری عمل نمیکنند ولی خب من ندیدم)
۲- خط ۹۱ کد رو ببینید؛ هرجایی از کدم که بخوام یک
ادامه پست بعدی:
appalling
هست؟ با اینکه بنظر رفتار خیلی خوبی میاد.من یک نمونه کد زدم که نشون بدم چرا بد هست این رفتار؛ توی این حالت من بیش از حد سخت گرفتم و همه چیز
NewType
هست (یا یک رفتاری رو نباید دنبال کنید یا کل کد باید یک استاندارد رو رعایت کنه)اولین و مهمترین نکته :
توجه کنید نویسنده همین رفتار یعنی تعریف مداوم تایپ جدید برای نوع دادههای اصلی رو بد میدونه!
اینکه بجای str, bool, int تایپ جدید تعریف کنید که پارامتر ورودی شما بهتر بنظر برسه!
حالا بررسی کنیم خود ایرادات وارده رو:
۱- تعریف نوع دادهای جدید هیچ عملکرد بهتری برای
runtime
بهم نمیده!خیلی از افرادی که اینکار رو میکنند برای فرار از تست کردن کدها؛ فرار از نوشتن ولیدیشن؛ فرار از چک کردن پارامترهای ورودی و ... اینکار رو میکنند! این چیزی هست که شخصا بسیار توی این مدل کد زدن دیدم (قطعا هستند افرادی که اینطوری عمل نمیکنند ولی خب من ندیدم)
۲- خط ۹۱ کد رو ببینید؛ هرجایی از کدم که بخوام یک
str
یا ... رو برای این توابع استفاده کنم حتما باید توی NewType
ایی که تعریف کردم بذارمش!ادامه پست بعدی:
👍16❤5🔥1
Python Hints
پرسیدید چرا نویسنده میگه این مورد appalling هست؟ با اینکه بنظر رفتار خیلی خوبی میاد. من یک نمونه کد زدم که نشون بدم چرا بد هست این رفتار؛ توی این حالت من بیش از حد سخت گرفتم و همه چیز NewType هست (یا یک رفتاری رو نباید دنبال کنید یا کل کد باید یک استاندارد…
چیزایی که شخصا خیلی باهاشون مشکل دارم :
۳- وقتی این
هست؟ استفاده از اسم متغییر درست به توسعه دهنده بعدی به درستی میفهمونه که باید ایمیل استفاده کنه و نه چیز دیگری
اینجا باید ترجیح بدید که
۴- احساس امنیت کاذب؛ توی مورد ۱ به این موضوع اشاره کردم!
حالا بخش بدتر این قضیه کجاس ؟ دولوپرهای حواسپرت به mypy تکیه میکنند که دولپر دیگری از کدشون سواستفاده نکنه بجای اینکه دقیقا پارامتر ورودی رو بررسی کنند و اگر ایمیل ولید نیست ارور برگردونند.
۵- توی پایتون
کلاس بدون رفتار ؟
اینم موردی دیگه و یک
در نهایت :
چیز بدی نیست؛ جو گیری بده. وقتی سورس کد بزرگ هست و شما این موضوع رو بیش از حد پیش بردید اتفاقات قشنگی نخواهد افتاد.
دقت کنید این موارد حتی توی زبانهای کامپایلری و
خلاصه که هرچیزی رو در جای درست خودش استفاده کنید؛ این مورد یک فیچر هست توی پایتون که قطعا استفاده خواهد شد ولی بهتره درجای درست و برای مفهوم درست استفاده بشه!
کل صحبت نویسنده کتاب هم همین بوده که سعی کردم با مثال توضیح بدم.
۳- وقتی این
NewType
هیچ runtime
چکی نمیده؛ چه فرقی بین email: Email
email: str
هست؟ استفاده از اسم متغییر درست به توسعه دهنده بعدی به درستی میفهمونه که باید ایمیل استفاده کنه و نه چیز دیگری
اینجا باید ترجیح بدید که
Email
رو تبدیل به یک کلاس کنید که validation
های مختلف خودش رو هم حتما داشته باشه! ۴- احساس امنیت کاذب؛ توی مورد ۱ به این موضوع اشاره کردم!
حالا بخش بدتر این قضیه کجاس ؟ دولوپرهای حواسپرت به mypy تکیه میکنند که دولپر دیگری از کدشون سواستفاده نکنه بجای اینکه دقیقا پارامتر ورودی رو بررسی کنند و اگر ایمیل ولید نیست ارور برگردونند.
۵- توی پایتون
NewType
چون قوانین نامگذاری شبیه به Class
داره و البته که Syntax Highlight
هم مثل کلاس میبینه باعث سردرگمی میشه!کلاس بدون رفتار ؟
اینم موردی دیگه و یک
anti-pattern
دیگه در نهایت :
NewType
چیز بدی نیست؛ جو گیری بده. وقتی سورس کد بزرگ هست و شما این موضوع رو بیش از حد پیش بردید اتفاقات قشنگی نخواهد افتاد.
دقت کنید این موارد حتی توی زبانهای کامپایلری و
lowlevel
هم قفل هست.خلاصه که هرچیزی رو در جای درست خودش استفاده کنید؛ این مورد یک فیچر هست توی پایتون که قطعا استفاده خواهد شد ولی بهتره درجای درست و برای مفهوم درست استفاده بشه!
کل صحبت نویسنده کتاب هم همین بوده که سعی کردم با مثال توضیح بدم.
❤19🔥1
Python Hints
پرسیدید چرا نویسنده میگه این مورد appalling هست؟ با اینکه بنظر رفتار خیلی خوبی میاد. من یک نمونه کد زدم که نشون بدم چرا بد هست این رفتار؛ توی این حالت من بیش از حد سخت گرفتم و همه چیز NewType هست (یا یک رفتاری رو نباید دنبال کنید یا کل کد باید یک استاندارد…
image_2025-09-25_13-16-32.png
1.2 MB
نسخه با کیفیت تصویر
❤12👍2