| کانال توسعه‌دهندگان |
1.75K subscribers
55 photos
1 video
30 links
⭕️ کانال توسعه‌دهندگان دولوپیکس

💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
نام‌گذاری تمیز؛ اولین خط دفاع در Clean Code 🧹

یکی از عملی‌ترین ایده‌های کتاب Clean Code این است که «اسم خوب، نصف راه خوانایی کد است». خیلی از بدهی‌های فنی فقط با نام‌گذاری درست اصلاً به‌وجود نمی‌آیند.

👀 نشانه‌های نام‌گذاری بد

وقتی متغیر و تابع این‌طوری هستند:

def p(u):
if len(u) > 0:
for x in u:
if x[3] == 1:
send(x)


از روی اسم‌ها تقریباً هیچ چیز قابل‌فهم نیست. برای فهمیدن کد، مجبور می‌شویم پیاده‌سازی داخلی را خط‌به‌خط بخوانیم.

✅ چطور بهترش کنیم؟

۱️⃣ اسم باید «بگوید» چه‌کار می‌کند

def send_active_users(users):
if len(users) == 0:
return

for user in users:
if user.is_active():
send(user)


نام تابع، ورودی و شرط‌ها واضح شده‌اند. نیاز کمتری به کامنت داریم، چون خود کد توضیح‌دهنده است.

۲️⃣ از اسم‌های عمومی مثل data, info, tmp دوری کن

# بد
result = process(data)

# بهتر
normalized_orders = normalize_orders(raw_orders)


هرجا اسم مبهم می‌شود، خواننده باید در ذهنش حدس بزند؛ همین حدس‌ها منبع اصلی سوتفاهم در کد هستند.

۳️⃣ اسم تابع را فعل، اسم متغیر را اسم بگذار

# تابع با اسم اسمی (بدفهم)
user_status = user()


# واضح‌تر
status = get_user_status()


این الگوی ساده کمک می‌کند بدون نگاه به بدنه، از روی اسم‌ها بفهمیم هر چیزی «چیز است» یا «کار».

۴️⃣ از abbreviation بی‌معنی خودداری کن

# بد
cfg = read_cfg(pth)

# بهتر
config = read_config_file(path)


خودمان امروز معنای cfg را می‌فهمیم، ۶ ماه بعد یا برای همکار جدید، این تبدیل می‌شود به رمز.

۵️⃣ اسم‌ها را بر اساس domain انتخاب کن

استفاده از واژه‌های همان دامنه (Order, Invoice, Payment, Discount) کد را به زبان بیزینس نزدیک می‌کند و فهم سیستم را برای همه‌ی تیم آسان‌تر می‌کند.

📚 برای مطالعه بیشتر:
Clean Code, Chapter 2: Meaningful Names
Refactoring Guru - Code Smells

در هر refactor کوچک، فقط با بهتر کردن اسم‌ها می‌شود کیفیت طراحی را بالا برد؛ بدون تغییر رفتار کد. از همین commit بعدی، روی هر اسم چند ثانیه بیشتر فکر شود، بازدهش در بلندمدت شگفت‌انگیز است ✨

🔖 #Programming #برنامه_نویسی #clean_code #naming #meaningful_names #refactoring #readability #architecture

👤 Developix

💎 Channel: @DevelopixChannel
❤4
Forwarded from Developix Support
با Migration Boost هاست‌ایران، برای مهاجرت به سرور ابری دوباره هزینه ترافیک نده! 🚀

با خرید اولین سرور ابری غیرساعتی از **هاست‌ایران**، بسته ترافیک هدیه مهاجرت به‌صورت خودکار برای سرویس شما فعال می‌شود:

✅ حداقل ۱۰۰ گیگابایت ترافیک هدیه مهاجرت
✅ افزایش حجم هدیه متناسب با ظرفیت دیسک اولیه
✅ ترافیک آپلود رایگان
✅ بدون محدودیت زمانی

سرور ابری هاست‌ایران را راه‌اندازی کنید و بکاپ‌ها، فایل‌ها و پایگاه داده خود را بدون دغدغه هزینه‌های پنهان ترافیک منتقل کنید.

👇 مشاهده پلن‌های سرور ابری هاست‌ایران
hostiran.club/Migration
hostiran.club/Migration
💠 نسخه جدید محیط توسعه VSCode منتشر شده است

🔸 ارتقا از نسخه 1.130.0 به 1.131.0

🔖 #vscode, #chat, #release

💎 @DevelopixChannel
👍1
💠 نسخه جدید محیط توسعه Zed منتشر شده است

🔸 ارتقا از نسخه 1.12.1 به 1.13.1

🔖 #zed, #chat, #release

💎 @DevelopixChannel
👍1
در نمونه‌کد بالا، استفاده از آرگومان پیش‌فرض قابل‌تغییر (مثل list) در تعریف تابع باعث بروز رفتار غیرقابل‌پیش‌بینی و Memory Leak منطقی در سناریوهای پیچیده می‌شود، چون همهٔ فراخوانی‌ها همان آبجکت پیش‌فرض را به‌اشتراک می‌گذارند. به‌جای آن می‌توانید با مقدار پیش‌فرض None و ساخت لیست جدید داخل تابع، هر بار یک state مستقل بسازید و از باگ‌های سخت‌رفع در کدهای چندماژوله و تست‌نویسی جلوگیری کنید.

🔖 #Programming #برنامه_نویسی

👤 Developix

💎 Channel: @DevelopixChannel
💠 نسخه جدید محیط توسعه VSCode منتشر شده است

🔸 ارتقا از نسخه 1.131.0 به 1.132.0

🔖 #vscode, #chat, #release

💎 @DevelopixChannel
👍1
💠 نسخه جدید محیط توسعه Zed منتشر شده است

🔸 ارتقا از نسخه 1.13.2 به 1.14.2

🔖 #zed, #chat, #release

💎 @DevelopixChannel
👍1
💠 نسخه جدید محیط توسعه VSCode منتشر شده است

🔸 ارتقا از نسخه 1.132.1 به 1.133.0

🔖 #vscode, #chat, #release

💎 @DevelopixChannel
👍1
💠 نسخه جدید محیط توسعه Zed منتشر شده است

🔸 ارتقا از نسخه 1.14.2 به 1.15.0

🔖 #zed, #chat, #release

💎 @DevelopixChannel
❤2
💠 نسخه جدید محیط توسعه ویژوال استودیو (Visual Studio) منتشر شده است

🔸 ارتقا از نسخه 18.8.3 به 18.9.0

🔖 #visual_studio, #chat, #csharp, #release

💎 @DevelopixChannel
👍3❤1
🧩 این کد پایتون چه باگ عجیبی داره؟

هر بار که تابع add_item رو صدا می‌زنی، یه نتیجه غیرمنتظره می‌گیری.
مشکل اصلی توی این پیاده‌سازی چیه و چطور درستش می‌کنی؟

🔖 #Programming #برنامه_نویسی

👤 Developix

💎 Channel: @DevelopixChannel
💠 نسخه جدید محیط توسعه VSCode منتشر شده است

🔸 ارتقا از نسخه 1.133.0 به 1.134.0

🔖 #vscode, #chat, #release

💎 @DevelopixChannel
💠 نسخه جدید محیط توسعه Zed منتشر شده است

🔸 ارتقا از نسخه 1.15.1 به 1.16.1

🔖 #zed, #chat, #release

💎 @DevelopixChannel
🔥 پروژه: سرور LLM روی مک Apple Silicon

روی مک با Apple Silicon کار می‌کنی و می‌خواهی LLM محلی سریع داشته باشی؟ پروژه omlx دقیقا برای همین است 🤓

یک inference server سبک که مدل‌ها را با continuous batching و کش روی SSD اجرا می‌کند و همه‌چیز از منوی بالای macOS مدیریت می‌شود؛ بدون ترمینال، بدون دنگ‌وفنگ.

برای تست و دیباگ اپ‌های هوش مصنوعی روی مک گزینه‌ٔ خیلی جمع‌وجوری است.
لینک گیت‌هاب را یک‌بار چک کن، شاید دقیقا همان چیزی باشد که دنبالش بودی.

⭐️ 1,102 stars this week

🔖 #Programming #برنامه_نویسی #هوش_مصنوعی #LLM #Apple_Silicon

💎 @DevelopixChannel
🔥3❤1
یادته اون باگ لعنتی که هر ریکوئست جدید همون timestamp قدیمی رو برمی‌گردوند؟ معمولاً مقصر همچین چیزیه 👇

اینجا تو تابع اول، از datetime.now() به‌عنوان آرگومان پیش‌فرض استفاده شده. این مقدار فقط یک‌بار موقع تعریف تابع حساب می‌شه، نه هر بار صدا زدن تابع؛ برای همین همهٔ لاگ‌ها همون زمان اولی رو می‌گیرن.

تو نسخهٔ درست، پیش‌فرض رو None گذاشتیم و داخل تابع اگر timestamp تهی بود، تازه اون‌جا datetime.now() رو صدا می‌زنیم. این‌طوری هر بار یه زمان جدید و درست ثبت می‌شه.

خلاصه‌اش: اگه می‌خوای یه مقدار «الان» یا یه لیست/دیکشنری خالی پیش‌فرض داشته باشی، از آرگومان پیش‌فرض قابل تغییر یا dynamic استفاده نکن؛ None بذار و داخل تابع مقدارش رو بساز 😉

🔖 #Programming #برنامه_نویسی

👤 Developix

💎 Channel: @DevelopixChannel
👍5
💠 نسخه جدید محیط توسعه ویژوال استودیو (Visual Studio) منتشر شده است

🔸 ارتقا از نسخه 18.9.2 به 18.10.0

🔖 #visual_studio, #chat, #csharp, #release

💎 @DevelopixChannel
🔥 پروژه: چارچوب مهارت‌ توسعه‌دهنده «سوپِرپاورز»

سوپِرپاورز یک چارچوب مهارتی و متدولوژی توسعه نرم‌افزار است برای این‌که تبدیل به یک توسعه‌دهنده واقعاً «agentic» و صاحب‌اختیار در کار شوی.

داخل مخزن، راهنماها و چک‌لیست‌هایی برای مهارت‌هایی مثل اولویت‌بندی کار، دیباگ سیستماتیک، ارتباط با تیم و مدیریت ریسک پروژه وجود دارد؛ هم برای رشد فردی به‌درد می‌خورد، هم برای منتورینگ و لیدها 👀

از این‌جا می‌توان دیدش:
github.com/obra/superpowers

⭐️ 4,068 stars this week

🔖 #Programming #برنامه_نویسی #توسعه‌دهنده #متدولوژی #مدیریت_پروژه

💎 @DevelopixChannel
👍2
تو کدهای async اگه وسط کوروتین بری یه تابع بلاک‌کننده معمولی (مثلاً یه request سنگین) صدا بزنی، عملاً event loop رو می‌خوابی و کل مزیت async می‌پره.

توی مثال اول، تابع fetch_url مستقیماً از requests.get استفاده کرده و کل event loop رو بلاک می‌کنه؛ اگه چند تا fetch_url رو با هم gather کنی، عملاً به‌جای اجرای هم‌زمان، پشت سر هم اجرا می‌شن.

توی روش دوم، همون کار رو می‌بریم توی run_in_executor که I/O بلاک‌کننده رو بندازه روی thread جدا. این‌طوری event loop آزاد می‌مونه، کوروتین‌ها واقعاً concurrent اجرا می‌شن و تحت فشار تعداد زیاد request، برنامه خیلی روان‌تر عمل می‌کنه.

اگه مجبوری از کتابخونه‌های blocking مثل requests استفاده کنی، حتماً یه چیزی شبیه روش دوم پیاده کن یا کلاً مهاجرت کن به نسخه async اون کتابخونه (مثلاً به‌جای requests از httpx.AsyncClient یا aiohttp استفاده کن).

🔖 #Programming #برنامه_نویسی

👤 Developix

💎 Channel: @DevelopixChannel