برنامه نویسی

سومین روابط عمومی Hacktoberfest من: افزودن پشتیبانی محلی به Faker C++

Summarize this content to 400 words in Persian Lang
برای سومین مشارکت در جشنواره هکتوبرفست، من روی یک پروژه جذاب به نام Faker C++ کار کردم. این کتابخانه ++C، با الهام از Faker.js شناخته شده، طراحی شده است تا به توسعه دهندگان ابزاری انعطاف پذیر برای تولید داده های جعلی واقعی ارائه دهد. این مخزن چندین مشکل باز داشت که می‌توانم یکی از آن‌ها را انتخاب کنم، من یکی از آن‌ها را انتخاب کردم تا دوباره با توسعه C++ آشنا شوم.

بررسی اجمالی موضوع

مشکلی که من به آن پرداختم اضافه کردن پشتیبانی محلی به یک ماژول خاص در پروژه بود. هدف از این پیشرفت این بود که به ماژول کارخانه اجازه دهد تا داده‌ها را به زبان‌های مختلف تولید کند و کتابخانه را برای توسعه‌دهندگان در سراسر جهان سازگارتر کند. این تغییر به توسعه دهندگان این امکان را می دهد که داده های خاص مکان را ایجاد کنند، که به ویژه برای آزمایش برنامه های محلی یا ایجاد دموهای متناسب با مناطق مختلف ارزشمند است.

رویکرد و راه اندازی

تنظیم محیط من بیش از حد انتظار زمان برد. از آنجایی که مدت زیادی بود با C++ کار نکرده بودم، تصمیم گرفتم از ویژوال استودیو برای تنظیماتی که در گذشته استفاده می‌کردم، به جای کدهای Visual Studio، IDE معمولی خود، استفاده کنم. من مخزن را چنگال کردم، آن را به صورت محلی شبیه‌سازی کردم، یک شعبه جدید ایجاد کردم و دستورالعمل‌های مشارکت را برای دانلود و راه‌اندازی ابزارهای لازم برای توسعه دنبال کردم. من سعی کردم از Bazel به عنوان ابزار مدیریت ساخت استفاده کنم، اما پس از چند پیچیدگی، به CMake با Ninja تغییر مکان دادم که ثابت شد راه اندازی سازگارتر برای این پروژه است. علاوه بر این، مجبور شدم پیکربندی کنم clang-format برای اطمینان از اینکه کد من از استانداردهای قالب بندی خاص پروژه پیروی می کند. برای اینکه همه این فرآیندها پیچیدگی کمتری داشته باشند و برخی از اسکریپت های bash را اجرا کنند، WSL را نیز روی سیستم عامل ویندوز 11 خود نصب کردم تا از هسته لینوکس استفاده کنم. این مرحله راه اندازی چالش برانگیز بود اما برای حفظ سازگاری با پایگاه کد ضروری بود.

تغییرات ایجاد شده

هنگامی که محیط آماده شد، بر درک ساختار ماژول و تغییرات مورد نظر تمرکز کردم. از آنجایی که در یک محیط نسبتاً ناآشنا کار می کردم، آشنایی با پایگاه کد یک گام اساسی بود. خوشبختانه، پایگاه کد به خوبی مستند شده بود، و صاحب مخزن به یک درخواست کشش قبلی اشاره کرد که به عملکرد مشابه در یک ماژول دیگر اشاره کرد. این مثال زمینه مفیدی را ارائه کرد و نحوه برخورد من با تغییرات کد را روشن کرد.

به روز رسانی کد اولیه شامل اضافه کردن بود enUS به‌عنوان محلی پیش‌فرض برای ماژول گیاه، که نیاز به افزودن ساختار جدیدی داشت که پارامتر محلی را می‌پذیرفت. این تغییر ماژول را قادر می‌سازد تا داده‌های گیاهی محلی را بر اساس اولویت کاربر ایجاد کند. موجود را هم آپدیت کردم plant_test فایلی را برای گنجاندن آزمایش محلی، تضمین می کند که ویژگی جدید همانطور که انتظار می رفت کار می کند و به طور کامل توسط موارد آزمایشی پوشش داده می شود. تست کردن حوزه دیگری بود که در آن نیاز داشتم به C++ برسم، و کار کردن در این زمینه به من اجازه داد تا با چارچوب های تست C++ در این مورد GoogleTest راحت تر باشم، که تجربه یادگیری خوبی بود.

این روابط عمومی پشتیبانی محلی را در ماژول کارخانه با enUS را به عنوان پیش فرض تنظیم کنید.
رفع مشکل: #898
تغییرات:

پارامتر محلی برای تعاریف گیاه

اضافه شد getPlantDefinition() با محلی به عنوان پارامتر برای پشتیبانی از داده های گیاهی مبتنی بر محلی.
پیش فرض به enUS به عنوان بازگشتی برای مناطق تعریف نشده یا پشتیبانی نشده:

const struct PlantDefinition& getPlantDefinition(Locale locale) {
switch (locale) {
default:
return enUSPlantDefinition;
}
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نامگذاری محلی خاص در داده های گیاهی

نام‌گذاری آرایه برای داده‌های گیاه به‌روزرسانی شده، برای انعکاس منطقه:

const auto enUSTrees = std::to_array {/* data */};

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

به‌روزرسانی‌های مجموعه آزمایشی

به روز شد plant_test برای ادغام پارامتر محلی جدید.

[x] تمام تست های واحد را پس از ساخت پروژه انجام داد تا از عدم شکستگی ناشی از افزودن محلی اطمینان حاصل شود.

بعد از نهایی کردن تغییرات کد، اجرا کردم clang-format و تمام آزمایشات را برای اطمینان از مطابقت تغییرات با استانداردهای مخزن انجام داد. مالک مخزن درخواست کشش من را بررسی کرد و یک تنظیم کوچک برای گنجاندن برچسب های Doxygen برای پارامتر محلی جدید برای حفظ مستندات کامل پیشنهاد کرد. من به سرعت این تغییرات را وارد کردم و مطمئن شدم که پارامتر محلی کاملاً مستند شده است. پس از این بازنگری و گذراندن همه بررسی‌ها، درخواست کشش من با موفقیت ادغام شد و نشان‌دهنده تکمیل سومین مشارکت من در جشنواره Hacktoberfest بود.

نتیجه گیری

با تأمل در این درخواست کشش، این تجربه را هم چالش برانگیز و هم ارزشمند یافتم. راه‌اندازی یک محیط توسعه ++C بیشتر از حد انتظار طول کشید، اما این مرحله به من کمک کرد تا اهمیت داشتن یک راه‌اندازی قوی را درک کنم، به‌ویژه زمانی که روی یک پروژه به زبانی ناآشنا کار می‌کنم. کار با فریمورک‌های آزمایشی در C++ نیز تجربه خوبی بود، و به من بینشی داد که چگونه کدهای ماژولار را می‌توان به طور کامل در زبانی مانند C++ آزمایش کرد. در پایان، این مشارکت نه تنها به Faker C++ انعطاف‌پذیری محلی اضافه کرد، بلکه منطقه راحتی من را نیز گسترش داد و به من کمک کرد مهارت‌های جدیدی کسب کنم که می‌توانم آن‌ها را در پروژه‌های C++ آینده بیاورم.

برای سومین مشارکت در جشنواره هکتوبرفست، من روی یک پروژه جذاب به نام Faker C++ کار کردم. این کتابخانه ++C، با الهام از Faker.js شناخته شده، طراحی شده است تا به توسعه دهندگان ابزاری انعطاف پذیر برای تولید داده های جعلی واقعی ارائه دهد. این مخزن چندین مشکل باز داشت که می‌توانم یکی از آن‌ها را انتخاب کنم، من یکی از آن‌ها را انتخاب کردم تا دوباره با توسعه C++ آشنا شوم.

بررسی اجمالی موضوع

مشکلی که من به آن پرداختم اضافه کردن پشتیبانی محلی به یک ماژول خاص در پروژه بود. هدف از این پیشرفت این بود که به ماژول کارخانه اجازه دهد تا داده‌ها را به زبان‌های مختلف تولید کند و کتابخانه را برای توسعه‌دهندگان در سراسر جهان سازگارتر کند. این تغییر به توسعه دهندگان این امکان را می دهد که داده های خاص مکان را ایجاد کنند، که به ویژه برای آزمایش برنامه های محلی یا ایجاد دموهای متناسب با مناطق مختلف ارزشمند است.

رویکرد و راه اندازی

تنظیم محیط من بیش از حد انتظار زمان برد. از آنجایی که مدت زیادی بود با C++ کار نکرده بودم، تصمیم گرفتم از ویژوال استودیو برای تنظیماتی که در گذشته استفاده می‌کردم، به جای کدهای Visual Studio، IDE معمولی خود، استفاده کنم. من مخزن را چنگال کردم، آن را به صورت محلی شبیه‌سازی کردم، یک شعبه جدید ایجاد کردم و دستورالعمل‌های مشارکت را برای دانلود و راه‌اندازی ابزارهای لازم برای توسعه دنبال کردم. من سعی کردم از Bazel به عنوان ابزار مدیریت ساخت استفاده کنم، اما پس از چند پیچیدگی، به CMake با Ninja تغییر مکان دادم که ثابت شد راه اندازی سازگارتر برای این پروژه است. علاوه بر این، مجبور شدم پیکربندی کنم clang-format برای اطمینان از اینکه کد من از استانداردهای قالب بندی خاص پروژه پیروی می کند. برای اینکه همه این فرآیندها پیچیدگی کمتری داشته باشند و برخی از اسکریپت های bash را اجرا کنند، WSL را نیز روی سیستم عامل ویندوز 11 خود نصب کردم تا از هسته لینوکس استفاده کنم. این مرحله راه اندازی چالش برانگیز بود اما برای حفظ سازگاری با پایگاه کد ضروری بود.

تغییرات ایجاد شده

هنگامی که محیط آماده شد، بر درک ساختار ماژول و تغییرات مورد نظر تمرکز کردم. از آنجایی که در یک محیط نسبتاً ناآشنا کار می کردم، آشنایی با پایگاه کد یک گام اساسی بود. خوشبختانه، پایگاه کد به خوبی مستند شده بود، و صاحب مخزن به یک درخواست کشش قبلی اشاره کرد که به عملکرد مشابه در یک ماژول دیگر اشاره کرد. این مثال زمینه مفیدی را ارائه کرد و نحوه برخورد من با تغییرات کد را روشن کرد.

به روز رسانی کد اولیه شامل اضافه کردن بود enUS به‌عنوان محلی پیش‌فرض برای ماژول گیاه، که نیاز به افزودن ساختار جدیدی داشت که پارامتر محلی را می‌پذیرفت. این تغییر ماژول را قادر می‌سازد تا داده‌های گیاهی محلی را بر اساس اولویت کاربر ایجاد کند. موجود را هم آپدیت کردم plant_test فایلی را برای گنجاندن آزمایش محلی، تضمین می کند که ویژگی جدید همانطور که انتظار می رفت کار می کند و به طور کامل توسط موارد آزمایشی پوشش داده می شود. تست کردن حوزه دیگری بود که در آن نیاز داشتم به C++ برسم، و کار کردن در این زمینه به من اجازه داد تا با چارچوب های تست C++ در این مورد GoogleTest راحت تر باشم، که تجربه یادگیری خوبی بود.

این روابط عمومی پشتیبانی محلی را در ماژول کارخانه با enUS را به عنوان پیش فرض تنظیم کنید.

رفع مشکل: #898

تغییرات:

  1. پارامتر محلی برای تعاریف گیاه
    • اضافه شد getPlantDefinition() با محلی به عنوان پارامتر برای پشتیبانی از داده های گیاهی مبتنی بر محلی.
    • پیش فرض به enUS به عنوان بازگشتی برای مناطق تعریف نشده یا پشتیبانی نشده:
    const struct PlantDefinition& getPlantDefinition(Locale locale) {
       switch (locale) {
        default:
            return enUSPlantDefinition;
        }
    }
    وارد حالت تمام صفحه شوید

    از حالت تمام صفحه خارج شوید

  2. نامگذاری محلی خاص در داده های گیاهی
    • نام‌گذاری آرایه برای داده‌های گیاه به‌روزرسانی شده، برای انعکاس منطقه:
    const auto enUSTrees = std::to_array<:string_view> {/* data */};
    وارد حالت تمام صفحه شوید

    از حالت تمام صفحه خارج شوید

  3. به‌روزرسانی‌های مجموعه آزمایشی
    • به روز شد plant_test برای ادغام پارامتر محلی جدید.

  • [x] تمام تست های واحد را پس از ساخت پروژه انجام داد تا از عدم شکستگی ناشی از افزودن محلی اطمینان حاصل شود.

بعد از نهایی کردن تغییرات کد، اجرا کردم clang-format و تمام آزمایشات را برای اطمینان از مطابقت تغییرات با استانداردهای مخزن انجام داد. مالک مخزن درخواست کشش من را بررسی کرد و یک تنظیم کوچک برای گنجاندن برچسب های Doxygen برای پارامتر محلی جدید برای حفظ مستندات کامل پیشنهاد کرد. من به سرعت این تغییرات را وارد کردم و مطمئن شدم که پارامتر محلی کاملاً مستند شده است. پس از این بازنگری و گذراندن همه بررسی‌ها، درخواست کشش من با موفقیت ادغام شد و نشان‌دهنده تکمیل سومین مشارکت من در جشنواره Hacktoberfest بود.

نتیجه گیری

با تأمل در این درخواست کشش، این تجربه را هم چالش برانگیز و هم ارزشمند یافتم. راه‌اندازی یک محیط توسعه ++C بیشتر از حد انتظار طول کشید، اما این مرحله به من کمک کرد تا اهمیت داشتن یک راه‌اندازی قوی را درک کنم، به‌ویژه زمانی که روی یک پروژه به زبانی ناآشنا کار می‌کنم. کار با فریمورک‌های آزمایشی در C++ نیز تجربه خوبی بود، و به من بینشی داد که چگونه کدهای ماژولار را می‌توان به طور کامل در زبانی مانند C++ آزمایش کرد. در پایان، این مشارکت نه تنها به Faker C++ انعطاف‌پذیری محلی اضافه کرد، بلکه منطقه راحتی من را نیز گسترش داد و به من کمک کرد مهارت‌های جدیدی کسب کنم که می‌توانم آن‌ها را در پروژه‌های C++ آینده بیاورم.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا