رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران

پرچمداران

  1. کامبیز اسدزاده

    کامبیز اسدزاده

    بنیـــان گذار


    • امتیاز

      6

    • تعداد ارسال ها

      353


  2. amirb

    amirb

    کاربـــر عـــــادی


    • امتیاز

      1

    • تعداد ارسال ها

      29



مطالب محبوب

در حال نمایش مطالب دارای بیشترین امتیاز از زمان دوشنبه, 11 آذر 1398 در همه بخش ها

  1. 3 امتیاز
    با سلام و درود، همانطور که می‌دانید ویژگی‌های اخیر در استاندارد‌های ۱۷ و ۲۰ بسیار عظیم و کاربردی هستند. هدف ما در مرجع آی‌او‌استریم این است که با توجه به به‌روز‌رسانی‌های زبان سی‌پلاس‌پلاس مهمترین مواردی که نیاز است معرفی کنیم. بنابراین در این بخش به یکی از کاربردی‌ترین موارد مرتبط در استاندارد ۱۷ با عنوان صفت‌های ویژه اشاره می‌شود که در ادامه به تعریف هر یک از آن‌ها می‌پردازیم. با توجه به استاندارد‌های ۱۱ و ۱۴ که در آن صفت‌هایی همچون [[deprecated]] و [[noreturn]] معرفی شده‌اند که وظیفه‌ی آن به ترتیب نمایش وضعیت منسوخ شدن یک عملکرد و یا وضعیت بازگشتی یک تابع از نوع void است. چنین صفاتی می‌توانند در زمان اعلان و تعریف متغیر‌ها و یا توابع مورد استفاده قرار گیرند. به عنوان مثال اگر کدی به صورت زیر داشته باشیم: [[deprecated]] void print(const std::string &message) { std::cout << message << std::endl; } در صورتی که تابع print در بخشی از برنامه مورد استفاده قرار بگیرد، پیغامی از سمت کامپایلر از نوع اخطار (warning) ساطع می‌شود، مبنی بر آن که تابع مربوطه به عنوان منسوخ شده یاد شده است. warning: 'print' is deprecated این ویژگی می‌تواند در ساخت و توسعه‌ی کتابخانه‌ها، موتور‌ها، چهارچوب (فریم‌ورک‌) و برنامه‌هایی که قرار است دیگر برنامه‌نویسان از آن‌ها استفاده کنند بسیار می‌تواند کاربردی باشد؛ چرا که با اعمال چنین خاصیت‌هایی در کد‌های شما برای توسعه‌دهندگان یادآوری خواهد شد که کد مربوطه در نسخه‌ی جدید یا نسخه‌های بعدی امکان حذف و یا تغییر را خواهد داشت. #include <iostream> #include <string> [[deprecated]] void print(const std::string &message) { std::cout << message << std::endl; } int main() { print("Hello, World!"); return 0; } در مثال بالا اخطار پیش‌فرض از سمت کامپایلر ساطع می‌شود، اما در بعضی از مواقع لازم است پیغام سفارشی جهت راهنمایی بیشتر کاربر اعمال شود که در این صورت صفت می‌تواند پیغام از نوع رشته را دریافت و در هنگام ساطع شدن، آن را نمایش دهد. برای این کار کافی است متن مورد نظر را به صورت زیر در صفت خود تعیین کنیم. [[deprecated("Use printView with print instead, this function will be removed in the next release")]] برای مثال یک تابع جایگزین و بهینه شده را به صورت زیر در نظر بگیرید، کامپالر اخطار مروبطه و سفارشی شده را نسبت به آن ساطع خواهد کرد. #include <iostream> #include <string> [[deprecated]] void print(const std::string &message) { std::cout << message << std::endl; } void printView(std::string_view message) { std::cout << message << std::endl; } int main() { printView("Hello, World!"); return 0; } همچنین در رابطه با صفت [[noreturn]] که در استاندارد ۱۱ معرفی شده است، باید در نظر داشت این صفت جهت بهینه‌سازی کامپایلر در رابطه با تولید هشدار‌های بهتر و همچنین اعلام اینکه تابع مربوطه قابل دسترسی نیست مورد استفاده قرار می‌گیرد. مثال: #include <iostream> [[noreturn]] void myFunction() { std::cout << "Hello, World!" << std::endl; throw "error"; } void print() { std::cout << "Print Now!"; } int main() { myFunction(); print(); return 0; } در کد فوق، در زمان هم‌گردانی (کامپایل) پیغام‌ زیر ساطع می‌شود: warning: code will never be executed بنابراین در زمان اجرا تابع print(); اجرا نخواهد شد، زیرا به عنوان یک کد غیر قابل دسترس بعد از myFunction توسط کامپایلر یاد می‌شود. چرا که این امر اجازه می‌دهد تا کامپایلر بهینه‌سازی‌های مختلفی را انجام دهد - نیازی به ذخیره‌سازی‌ و بازیابی هرگونه حالت‌های ناپایدار در اطراف صدا زننده (Caller) نیست. بنابراین می‌تواند کد‌های غیر قابل دسترس را از بین ببرد. با توجه به نیاز‌های این چنینی، در استاندارد ۱۷ صفت‌های جدید‌تر و کاربردی‌تری نیز ارائه شده است که به معرفی هر یک از آن‌ها در بخش اول از این مقاله می‌پردازیم. صفت‌های معرفی شده در استاندارد 1z یا همان ۱۷ به صورت زیر هستند: [[fallthrough]] [[maybe_unused]] [[nodiscard]] معرفی صفت [[fallthrough]] به طور معمول در برنامه‌نویسی، هر وقت که مرحله‌ی مربوط به case در دستور switch به انتهای خود می‌رسد، کد مربوطِ به دستورِ case بعدی اجرا خواهد شد. طبیعتاً عبارت break می‌تواند از این امر جلوگیری کند. اما از آن‌جایی که این رفتار را به اصطلاح fall-through می‌شناسیم، ممکن است در صورت عدم معرفی اشکالاتی را فراهم کند، در این حالت چندین کامپایلر و ابزار‌های آنالیز کننده خطای مرتبط به آن را هشدار می‌دهند تا کاربر در جریان قرار بگیرد. با توجه به این موضوع که ممکن است بعضاً این مورد چشم‌ پوشی شود، در سی‌پلاس‌پلاس ۱۷ به بعد یک صفت استاندارد معرفی شد تا توسعه‌دهنده بتواند با قرار دادن آن در مکان سقوط (fall-through) به کامپایلر اعلام کند که هشداری در آن بخش لازم نیست. کامپایلر‌ها می‌توانند هشدارهای مطمئنی را در زمانی که یک عبارت case بدون اجرای دستور break به انتهای خود می‌رسند و یا سقوط (fall-through) می‌کند، حداقل با یک جمله‌ی مربوطِ به آن را ساطع کند. برای مثال به کد زیر توجه کنید: #include <iostream> int main() { int number { 2017 }; int standard = {0}; switch(number) { case 2011: case 2014: case 2017: std::cout << "Using modern C++" << std::endl; case 1998: case 2003: standard = number; } return 0; } در کد فوق، در زمان اجرای دستور case سوم با مقدار ۲۰۱۷، کامپایلر هشداری به صورت زیر را اعمال خواهد کرد. warning: unannotated fall-through between switch labels در این حالت برای از بین بردن (چشم‌پوشی کردن) از این خطا در صورتی که نیاز نباشد موارد دیگر مورد بررسی قرار بگیرد قرار دادن دستور break بعد از آن می‌تواند منطقی باشد. اما با توجه به انتظاری که می‌رود تا دستورات بدون توقف بین آن‌ها اجرا شود، قراردادن دستور [[fallthrough]]; بعد از آن می‌تواند راه حل بسیار مناسبی باشد. #include <iostream> int main() { int number { 2017 }; int standard = {0}; switch(number) { case 2011: case 2014: case 2017: std::cout << "Using modern C++" << std::endl; [[fallthrough]]; // > No warning case 1998: case 2003: standard = number; } return 0; } در این حالت، کامپایلر بدون ساطع کردن خطا آن را هم‌گردانی خواهد کرد. معرفی صفت [[maybe_unused]] صفت [[maybe_unused]] برای نشان دادن کد ایجاد شده‌ای است که ممکن است از منطق قطعی استفاده نکند. این مورد ممکن است اغلب در لینک شدن با پیش‌پردازنده‌ها مورد استفاده قرار بگیرد یا نگیرد. از آن‌جایی که کامپایلر (هم‌گردان‌ها) می‌توانند نسبت به متغیر‌های بلا استفاده هشدار ساطع کنند، این صفت روش بسیار خوبی برای سرکوب آن‌ها خواهد بود. استفاده از این ویژگی می‌تواند در بخش‌های مهمی مفید باشد، فرض کنید کتابخانه‌ای نوشته‌ایم که قرار است به صورت چند-سکویی دارای ویژگی‌های یکسان در بستر‌های مختلف باشد. برای مثال ساخت یک فایل در مسیر مشخصی از سیستم‌عامل مورد نظر جهت اعمال تنظیمات نرم‌افزار. namespace FileSystem::Configuration { [[maybe_unused]] std::string createWindowsConfigFilePath(const std::string &relativePath); [[maybe_unused]] std::string createMacOSConfigFilePath(const std::string &relativePath); [[maybe_unused]] std::string createLinuxConfigFilePath(const std::string &relativePath); [[maybe_unused]] std::string createiOSConfigFilePath(const std::string &relativePath); [[maybe_unused]] std::string createAndroidConfigFilePath(const std::string &relativePath); } به کد بالا توجه کنید، در صورتی که شما در محیط کد‌نویسی در حال استفاده از یک دستور مورد نظر از بین دستورات بالا هستید، طبیعتاً کامپایلر به بقیه‌ی دستوراتی که از آن‌ها استفاده نمی‌کنید پیغامی مبنی بر آن‌ که دستور مربوطه بلا‌استفاده مانده است را ساطع می‌کند. جهت جلو‌گیری از این هشدار‌ها کافی است صفت [[maybe_unused]] را قبل از آن‌ها اعمال کنید. معرفی صفت [[nodiscard]] در صورتی که از [[nodiscard]] استفاده شود، کامپایلر می‌تواند درک کند توابعی که مقدار بازگشتی دارند نمی‌توانند مقدار بازگشت داده شده‌ی آن‌ها را دور انداخت و یا از آن‌ها در زمان صدا زدن صرف نظر کرد. بنابراین با تعریف این صفت در توابع از نوع بازگشتی می‌توان پیغامی به صورت زیر را ساطع کند. مثال: #include <iostream> [[nodiscard]] int myFunction() { return 17; } int main() { myFunction(); return 0; } در مثال فوق تابع myFunction در زمان فراخوانی که مقدار بازگشتی آن بی نتیجه مانده است از سمت کامپایلر هشدار مورد نظر را دریافت خواهد کرد. این پیغام در صورتی که مقدار بازگشتی تابع به متغیری از هم نوعِ خودش ارسال شود، ساطع نخواهد شد. #include <iostream> [[nodiscard]] int myFunction() { return 17; } int main() { int func; func = myFunction(); return 0; } بخش دوم این مقاله در پست‌های بعدی ارائه می‌شود.
  2. 1 امتیاز
    با سلام و عرض خسته نباشید. نظرتون راجع به پلتفرم vert.x چیست؟ به نظر میاد توی تست ها عملکرد خوبی داشته و در بسیاری موارد از فریمورک های c++ هم بهتر عمل کرده. ویژگی خوبش هم اینه که میشه با جاوا اسکریپت و روبی هم براش کد نوشت.
  3. 1 امتیاز
    سلام و درود، مدتی است از سرویس‌های کاوه‌نگار جهت استفاده در پروژه‌‌های خودم استفاده می‌کنم و مطمئنم یکی از بهترین سرویس‌دهنده‌های ایرانی در زمینه‌ی پیام کوتاه است. متأسفانه همانطور که می‌دانید بسیاری از سرویس‌دهنده‌ها در ایران به خاطر عدم شناخت دقیق از اهمیت و کاربرد سی++ هیچ حرکتی در توسعه‌ی سرویس‌های خود در رابطه با سی++ را نمی‌کنند. بنابراین، جدیداً تصمیم گرفتم کیت‌های توسعه در قالب رابط‌های برنامه‌نویسی مورد نیاز رو برای این چنین شرکت و سرویس‌ها آن ارائه کنم. معرفی سرویس پیام کوتاه کاوه‌نگار کاوه نگار با ارائه وب‌سرویس پیامک و تماس صوتی پیشرفته برای توسعه دهندگان ،امکان ارسال و دریافت پیامک و برقراری تماس اینترنتی را در اغلب سرویس های نرم افزاری مهیا می کند. اهمیت وجود این سرویس در زبان‌هایی مانند C و ++C همانطور که می‌دانید با توجه به اهمیت این زبان‌ها و به خصوص پشتیبانی از کتابخانه‌های بسیار مدرن در توسعه‌ی اپلیکیشن‌ها و وب‌ها کاربرد بسیاری دارند که شاید در کشور ما آن‌چنان با آن‌ها آشنا نیستیم. بنابراین وجود سرویس‌های ارسال پیامک در قالب زبان‌ سی‌پلاس‌پلاس می‌تواند کمک بسیار بزرگی به توسعه‌دهندگان و علاقه‌مندان آن در حوزه‌های توسعه‌ی نرم‌افزار و انواع برنامه‌های موبایل و وب کمک کند. ساختار اولیه خروجی سرویس کاوه‌نگار به صورت زیر است: { "return": { "status":404, "message":"متد تعریف نشده است" }, "entries": { null } } در صورتی که مقادیر ارسالی صحیح و مطابق با اطلاعات کاربری موجود در کاوه‌نگار باشد نتیجه‌ی برگشتی آن به صورت زیر خواهد بود: { "return": { "status": 200, "message": "تایید شد" }, "entries": [ { "messageid": 8792343, "message": "خدمات پیام کوتاه کاوه نگار", "status": 1, "statustext": "در صف ارسال", "sender": "10004346", "receptor": "0914XXXXXXX", "date": 1356619709, "cost": 120 } ] } نمونه‌ی اولیه که توسعه داده شده، با مفهوم اولیه جهت ارسال پیام کوتاه بر اساس کلید و شماره‌های ارسالی آماده شده که کد نمونه‌ی آن به صورت زیر خواهد بود. #include <iostream> #include <Kavenegar> int main() { //! Your Api Key std::string apiKey {"Your Api-Key"}; //! Kavenegar Default Sender Number std::string senderLine {"10004346"}; Kavenegar::KavenegarApi api(MethodType ,"10004346",apiKey); //ToDo.. try catch exception handling. api.send("09140000000","Hi!"); std::cout << "Result : " << api.getResult(); //JSon Output return 0; } نکته: نمونه‌ی ساخته شده کامل و با تمام جزئیات موجود در کاوه‌نگار تکمیل و توسعه داده خواهد شد. لینک مربوط به کیت توسعه در گیت‌هاب. جهت استفاده از این نمونه توجه داشته باشید که جهت اجرای وب‌سرویس آن نیاز به نصب Curl و RapidJson خواهید داشت.
  4. 1 امتیاز
    با سلام، طبق بررسی‌های لازم تغییراتی در گروه‌های کاربری اعمال شده است که از این پس کاربرانی که به عنوان کاربران فعال در حوزه‌ی یادگیری و مشارکت در بحث‌ها فعال می‌کنند از گروه پیش‌فرض کاربران عادی به کاربران رسمی تغییر دسترسی خواهند داشت. طبق آخرین اصلاحیه در سند‌( شرایط کسب مجوز فعالیتی و ارتقا حساب‌کاربری) ، کاربران عضو در این گروه دسترسی لازم برای ارسال تصویر، افزودن امضاء و همچنین عدم نیاز به تایید مطالب توسط مدیریت را خواهند داشت.
  5. 1 امتیاز
    طبق گزارش @قاسم رمضانی منش عزیز، مبنی بر اینکه بلوک کُد بر روی مرجع فاقد شماره گذاری می‌باشد در یک به‌روز رسانی از نسخه‌ی ۹.۱۰ به ۹.۱۳.۱ در پلاگین HilightJS این مورد حل گردید. نمونه خروجی‌: // 'Hello World!' program #include <iostream> int main() { std::cout << "Hello World!" << std::endl; return 0; }
این صفحه از پرچمداران بر اساس منطقه زمانی تهران/GMT+03:30 می باشد
×
×
  • جدید...