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

پرچمداران

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

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

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


    • امتیاز

      73

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

      136


  2. علی رشیدی

    علی رشیدی

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


    • امتیاز

      5

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

      2


  3. سید معین حسینی

    سید معین حسینی

    میانجی گر‌ها


    • امتیاز

      3

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

      8


  4. sina

    sina

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


    • امتیاز

      2

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

      1



مطالب محبوب

در حال نمایش مطالب دارای بیشترین امتیاز از زمان جمعه, 29 تیر 1397 در همه بخش ها

  1. 7 امتیاز
    با سلام، در این پُست ما قصد داریم در رابطه با نحوه‌ی آغاز یادگیری کیوت توضیح دهیم. اینکه به عنوان یک تازه‌کار چه پیش‌نیازاتی را باید مطالعه و در نهایت چگونه و تحتِ چه منابعی این کتابخانه‌ی قدرتمند را بیاموزیم. همچنین پاسخ برخی از سوالات شما را در این پُست به طور شفاف ارائه شده است که طیِ چندین سال سوال علاقه مندان بوده‌اند . پیش‌نیازات برای یادگیری کتابخانه‌ی Qt دانش متوسط و به بالا در رابطه با زبان‌ برنامه‌نویسی مُدرن سی‌پلاس‌پلاس نسخه‌‌های ۱۱ به بعد، (بنابراین اگر شما هیچ اطلاعی در رابطه با ساختار برنامه‌های سی‌پلاس‌پلاس و نحوه‌ی عملکرد آن ندارید، شانس موفقیت شما بسیار پایین خواهد بود و ممکن است برنامه‌ی تولید شده‌ی شما به بدترین شکل ممکن پیاده سازی شود). ما پیشنهاد می‌کنیم قبل از آن با زبان سی‌پلاس‌پلاس آشنا شوید. آشنایی با کامپایلر و نحوه‌ی عملکرد آن در پلتفرم‌های مختلف از جمله ویندوز، مک‌او‌اِس، لینوکس، اندروید و آی‌او‌اِس آشنایی با برنامه‌نویسی در معماری‌های مختلف مانند x86، x64، Arm و غیره... آشنایی با معماریِ سیستم‌عامل‌ها، برای مثال اگر قرار است از خاصیت چند-سکویی کیوت استفاده کنید تا یک برنامه‌ی تحت اندروید را توسعه دهید، در این صورت باید در نظر داشته باشید که شما بدون درکِ معماری سیستم‌عامل اندروید و پیکربندی برنامه در مراحل توسعه نمی‌توانید به راحتی از پسِ این کار بر آیید. آشنایی با اصطلاحات و مفاهیم تجربه‌ی کاربری و رابط کاربری جهت طراحی مناسب با فناوری‌های Qt Widget و Qt Quick (در صورتی که علاقه‌مند به طراحی ظاهر برنامه‌های خلاقانه دارید) آشنایی Xml و JavaScript برای طراحی رابط گرافیکی تحت فناوری‌های فوق آیا کیوت یک زبان برنامه‌نویسی است، چرا نحوِ (Syntax) آن با سی‌پلاس‌پلاس استاندارد فرق می‌کند؟ خیر، کیوت ابتدا به عنوان یک کتابخانه‌ی رابط گرافیکی کاربر توسعه داده شده است که بعد‌ها برای توسعه اهدافِ بیشتری شامل کتابخانه‌های شبکه و غیره شده است که در قالب یک چهارچوب (فریم‌وُرک) که تحت زبان برنامه‌نویسی سی‌پلاس‌پلاس برای این زبان توسعه یافته است و در زمینه‌های مختلفی کاربرد‌های فراوان دارد. دلیل زیبایی و ظاهر ساده‌ی آن ساختار بسیار قدرتمند آن است که موجب شده همانند چهارچوب‌های قدرتمند دیگری خودنمایی کند. (اما قول این ظاهر و سادگی آن را نخورید، چون با سی‌پلاس‌پلاس طرف هستیم ) آیا کیوت از سرویس‌ها و قابلیت‌های اختصاصی‌ِ اپلیکیشن‌های اندروید و آی‌او‌اِس را به طور کامل پشتیبانی می‌کند؟ خیر، هیچ ابزاری به صورت چند-سکویی فعلاً (تاکید می‌کنیم - فعلاً تا به این تاریخ) وجود ندارد که تمامی امکانات اختصاصی این پلتفرم‌ها را پشتیبانی کند. اما این به این معنی نیست که جواب منفی خواهد بود، لذا شما در برنامه‌نویسی سی‌پلاس‌پلاس به راحتی می‌توانید برای پلتفرم‌های فوق با سرویس‌های آن‌ها ارتباط برقرار کنید اما! این کار کمی نیاز به دانش فنی بالایی خواهد داشت. برای مثال (دسترسی به سرویس‌های اندروید یا آی‌او‌اس) با ترکیب کُد‌های آبجکتیو-سی و جاوا امکانپذیر است. این کار به راحتی قابل انجام خواهد بود و کافی است شما در رابطه با نحوه‌ی ترکیب کُد‌های این زبان‌ها مطلع باشید. کیفیت خروجی برنامه‌های تحت کیوت چگونه است؟ اگر شما واقعاً یک برنامه‌نویسِ ماهرِ سی‌پلاس‌پلاس باشید می‌توانید برنامه‌ای را تولید کنید که بسیار خوش دست‌تر و سریعتر از برنامه‌های پیشفرضِ پلتفرم‌ها باشد. اگر غیر از این باشد برنامه‌ی شما بسیار بد و کُند عمل خواهد کرد و بهتر است سراغ زبان‌های بومیِ (هر پلتفرم) بروید. هرچند سی‌پلاس‌پلاس یک زبان بومی برای تمامی پلتفرم‌ها محسوب می‌شود اما این ریسک برای افراد مبتدی پیشنهاد نمی‌شود. معمولاً برنامه‌های گسترده و عظیم توسط سی‌پلاس‌پلاس توسعه داده می‌شوند که برنامه‌نویسان آن واقعا حرفه‌ای و با قوانین این زبان آشنا هستند. آیا برای تولید برنامه‌های مک و آی‌او‌اس نیاز به سیستم خاصی داریم؟ بله، شما بدون وجود سیستم‌عامل مک نمی‌توانید برنامه‌ای را بر روی دستگاه‌های اپِل کامپایل کنید. این امر مستلزمِ سیستم عامل اختصاصی این شرکت بوده و باید توسعه دهنده دارای حساب کاربری معتبر سالانه باشد تا بتواند برنامه‌ی خود را بر روی دستگاه‌های مورد نظر اجرا کند. در غیر این صورت تنها می‌تواند برنامه‌ی خود را بر روی سیستم خود مورد آزمایش و خطا قرار دهد. آیا کیوت در ایران بازار کار مناسبی دارد، آیا ارزش دارد من این کتابخانه را یاد بگیرم؟ خوشبختانه کیوت بیشتر از ۲۰ سال است که در دنیا مورد استفاده قرار می‌گیرد و کشور‌های پیشرفته از آن استقبال می‌کنند. در کشور ما مدتی است این کتابخانه مورد استقبال قرار گرفته و بسیاری از شرکت‌ها مایل به ساخت و توسعه‌ی برنامه‌های خود تحت این کتابخانه هستند که برخی از دلایل آن (بهره بردن از قابلیت‌های زبان سی و سی‌پلاس‌پلاس و ویژگی‌های خاص آن است). آیا کیوت از پلتفرم وِب پشتیبانی می‌کند؟ کیوت از تمامی پلتفرم‌ها پشتیبانی می‌کند، مخصوصاً با پشتیبانی از ماژول‌های QtWebEngine و QtWebAssembly این امر امکانپذیر است که برنامه‌های خود را تحت فناوری‌های وِب نیز توسعه دهید. آیا من حتماً باید به زبان سی‌پلاس‌پلاس مسلط باشم؟ ما بر این تاکید نمی‌کنیم که شما حتماً باید سی‌پلاس‌پلاس را کامل یاد بگیرید، این زبان به قدری گسترده است که نمی‌توان درباره‌ی آن به این راحتی مدعی شد. اما قوانین و اصول اولیه و عامیانه‌ی زبان بسیار نیاز است. کتاب‌ها و مقالات مربوط به این زبان را بیاموزید و تا جایی که می‌توانید خود را ارتقاء دهید. من دانشجو یا متخصص رشته‌ی کامپیوتر نیستم، آیا می‌توانم این کتابخانه را یاد گرفته و از آن در توسعه برنامه‌های مورد نظر خود استفاده کنم؟ بله، اما ممکن است در تجزیه و تحلیل رفتار‌های سیستم‌عامل، مدیریت خطاها و پیکربندی ابزار‌های تخصصی (برنامه‌نویسی) با مشکلاتی مواجه شوید که تنها متخصصات این رشته می‌توانند آن را درک و حل کنند. آیا واقعاً حجم برنامه‌های کیوت نسبت به Net. یا Java بیشتر است !؟ خیر، به طور ذاتی برنامه‌های توسعه داده شده توسط سی‌++ دارای کمترین حجم برنامه هستند، معمولاً کتابخانه‌های استاندارد این زبان به صورت پیشفرض بر روی سیستم عامل‌ها تعبیه شده و در دسترس قرار دارند. اما شما در ویندوز زمانی که با دات‌نت برنامه‌نویسی می‌کنید، فریمورک مربوطه از قبل بر روی سیستم عامل ویندوز نصب بوده و بدون آن هیچ برنامه‌ی نوشته شده توسط دات‌نِت قابل اجرا نمی‌باشد. اما چون از قبل این کتابخانه بر روی سیستم‌عامل تعبیه شده است شما نیاز به تنها داشتن فایل اجرایی دارید و نیازی نیست فریم‌ورک دات‌نت را در کنار فایل اجرایی خود مستقر کنید. بنابراین حجم مربوط به چهارچوب به چشم نیامده و اینطور به نظر می‌رسد که برنامه‌های تحت دات نت بسیار سبُک‌تر هستند! متاسفانه این تفکری اشتباه است برنامه‌های تحت سی‌پلاس‌پلاس نسبت به زبان‌های دیگر کم حجم‌تر و سبُک‌تر بوده و شما کافی است فایل‌های مربوط به کتابخانه را در کنار برنامه‌ی خود داشته باشید. در رابطه با کتابخانه‌ی Qt نیز باید گفت کیوت به عنوان یک چهارچوب مانند دات نت شامل کلاس‌ها و ماژول‌هایی است که باید همانند دات نت بر روی سیستم عامل تعبیه شود اما چون اینکار به صورت جداگانه در کنار برنامه‌ی شما قرار می‌گیرد اینگونه تصور می‌شود که برنامه‌های مبتنی بر کیوت نسبت به دات نت از حجم بیشتری برخوردار هستند. این کاملاً طبیعی بوده و به عنوان نکته ضعف نیست. من علاقه‌ی خاصی به سی‌پلاس‌پلاس دارم و می‌خواهم کیوت را یاد بگیرم، از کجا و چه تحت منابعی باید شروع کنم؟ خوشبختانه کیوت از لحاظ مستندات بسیار جامع است و شما می‌توانید از آدرس https://doc.qt.io به تمامی مستندات مورد نیاز خود دسترسی داشته باشید. همچنین اگر نگران اینترنت خود هستید و یا به آن دسترسی مداوم ندارید می‌توانید از داخل محیط توسعه‌ی کیوت کریتور از بخش Help آن مستندات مورد نیاز خود را به صورت آفلاین دریافت کنید. من دنبال کتاب آموزشی کیوت هستم، آیا کیوت کتاب‌های آموزشی مفیدی در این زمینه از مقدمه تا پیشرفته دارد؟ بله، در این بخش شما می‌توانید کتاب‌هایی را در این زمینه مشاهده کنید که مرجع رسمی‌ِ کیوت آن‌ها را تایید کرده است. من به زبان انگلیسی تسلط کافی ندارم، ترجیح می‌دهم که از مراجع فارسی معتبر استفاده کنم، آیا کیوت در این زمینه منابعی دارد که معتبر باشند؟ خوشبختانه کیوت به قدری طعمِ جذابی برای برنامه‌نویسان دارد که ما اقدام به تالیف و پیاده سازی آموزش‌هایی در این زمینه کرده‌ایم، شما می‌توانید دو کتاب مقدماتی و پیشرفته‌ی این کتابخانه را تهیه کنید که در کتاب‌خانه‌ی ملی کشور به صورت رسمی به ثبت رسیده اند و عبارتند از نسخه‌‌های مقدماتی برای Qt Widgets و نسخه‌ی پیشرفته برای Qt Quick (این کتاب‌ها تجاری هستند). آیا مقالات یا کتاب‌های آموزشی رایگانی هم برای کیوت وجود دارد؟ خوشبختانه به لُطف برخی از دوستان برخی از مطالب در قالب PDF جمع آوری شده است. فایل آن را از این بخش می‌توانید دریافت کنید. همچنین کتاب‌های تجاری در برخی از روز‌های ویژه شامل تخفیف قرار می‌گیرند که مُختص کاربران رسمی مرجع می‌باشد. آیا لیستی برای مشاهده‌ی برنامه‌های توسعه یافته توسط Qt داریم؟ بسیاری از برنامه‌های قدرتمند و خارق‌العاده‌ای توسط سی‌پلاس‌پلاس توسعه داده می‌شوند که می‌توان لیست عظیمی از آن‌ها را نام برد. اما در این میان لیستی از برنامه‌هایی که تحت کیوت توسعه داده شده‌اند در این بخش آمده است. برای یادگیری استاندارد سی‌پلاس‌پلاس و تقویت مهارت خود در این زبان کدام مقالات و کتاب‌ها را پیشنهاد می‌کنید؟ علاوه بر این که شما می‌توانید در مرجع به دنبال آموزش‌های مرتبط با این زبان باشید، پیشنهاد ما این است که از مراجع رسمی آن نیز استفاده کنید. برخی از آن‌ها به صورت زیر آمده‌اند: cppreference.com http://www.cplusplus.com/ Learn C++ C++ Tutorial | SoloLearn: Learn to code for FREE! Learn C++ (Introduction and Tutorials to C++ Programming) اگر سوالی داشته باشم کجا می‌توانم آن را مطرح کرده و به پاسخ خود برسم؟ شما می‌توانید برای سوال و پرسش در انجمن‌های این مرجع اقدام کنید. اساتید و دوستان با تجربه سوالات شما را دریافت و مناسبترین پاسخ‌ها را ارائه خواهند داد. همچنین شما می‌توانید ما را در گروه‌ و کانال تلگرامی دنبال کنید. نکته (در این پُست بنابر اهداف فرهنگ‌سازی برای حق چاپ) فایل‌های مرتبط با کتاب‌های آموزشی زبان اصل و یا زبان فارسی قرار داده نشده است. کتاب‌های زیادی در رابطه با این زبان وجود دارند که به زبان اصلی می‌باشند اما برای احترام به نویسنده‌ی آن‌ها از ارسال چنین فایل‌هایی معذوریم. این پُست ممکن است ویرایش یا به‌روز رسانی شود.
  2. 4 امتیاز
    همانطور که می‌دانید، در سی‌پلاس‌پلاس برای ساخت یک کلاس انتزاعی (در قالب یک ساختار) یا همان Interface تحت کلمات کلیدی virtual امکان‌پذیر است. به طور کلی کلاسی که متُد‌های آن به صورت مجازی اعلان می‌شوند و شامل هیچ تعریف قبلی نیستند به عنوان کلاس انتزاعی (Abstract) یاد می‌شوند. برای مثال کلاس زیر را در نظر بگیرید: class Person { public: Person(); virtual ~Person(); virtual void print() = 0; //... }; کلاس Person به عنوان یک کلاس انتزاعی تعریف شد است. چرا که اعضای این کلاس فقط اعلان شده اند و به تنهایی هیچ کاری یا واکنشی را نسبت به خود ندارند. کلمه‌ی کلیدی virtual برای تعریف یک تابع از نوع مجازی ضروری است و اَصل پلئومورفیسم (چند ریختی / چند شکلی) را دربر دارد. در اصل اگر قرار باشد کلاسی بنویسید که مربوط به یک ماشین باشد (هر ماشین چه از نوع زمینی، چه از نوع صنعتی، و چه از نوع‌های دیگر) دارای کلید استارت (روشن/خاموش)، دارای قدرت موتور و یک سری ویژگی‌هایی است که ممکن است در هر یک از آن‌ها یکسان و یا متفاوت عمل کند. برای این منظور بهتر است کلاسی به صورت انتزاعی پیاده سازی شده و سپس در هر بخش هر یک از متد‌ها را نسبت به نیاز سفارشی سازی کنیم. فرض می‌کنیم که نیاز است در یک بازی کلاسی برای دریافت اطلاعات یک خودرو، هواپیمای جنگنده و یا غیره... ایجاد شود. کلاس انتزاعی ما درای ویژگی‌های ثابت غیر قابل توسعه و ویژگی‌هایی دارای قابلیت بازتعریف (جهت توسعه توسط کاربر) را فراهم کرده ایم. به مثال زیر دقت کنید: class Machine { public: Machine() {} virtual ~Machine() {} enum class Start {ON, OFF}; virtual bool start(const Start &start) const final { return true; } virtual std::string name(const std::string &nameValue) const final { return nameValue; } virtual int gears(const int &gears) const final { return gears; }; virtual int power(const int &powerValue) const { return powerValue; } virtual int cylinders(const int &totalValue) const final { return totalValue; } virtual int length(const int &lengthValue) const final { return lengthValue; } virtual int width(const int &widthValue) const final { return widthValue; } virtual std::string engineType() const = 0; }; class Porsche : public Machine { public: enum class EngineType { eSuper, eJuniur, e64, e356, e550, e911 }; enum class Color { White, Black, Red, Blue, Green }; Porsche(EngineType type) { etype = type; } ~Porsche() {} std::string color(const Porsche::Color &colorValue) const { switch (colorValue) { case Color::Black : eColor = "Black"; break; case Color::White : eColor = "White"; break; case Color::Blue : eColor = "Blue"; break; case Color::Red : eColor = "Red"; break; case Color::Green : eColor = "Green"; break; } return eColor; }; std::string engineType() const override { switch (etype) { case EngineType::eSuper : eTypeResult = "Super"; break; case EngineType::eJuniur : eTypeResult = "Juniur"; break; case EngineType::e64 : eTypeResult = "64"; break; case EngineType::e356 : eTypeResult = "356"; break; case EngineType::e550 : eTypeResult = "550"; break; case EngineType::e911 : eTypeResult = "911 Turbo"; break; } return eTypeResult; } private: EngineType etype; mutable std::string eTypeResult; mutable std::string eColor; }; class Aircraft : public Machine { public: enum class EngineType { e2SI, e3W, eAce, eSaturn}; Aircraft(EngineType type) { etype = type; } ~Aircraft() {} int power(const int &powerValue) const override { return powerValue; } std::string engineType() const override { switch (etype) { case EngineType::e2SI : eTypeResult = "2SI"; break; case EngineType::e3W : eTypeResult = "3W"; break; case EngineType::eAce : eTypeResult = "ACE"; break; case EngineType::eSaturn : eTypeResult = "Saturn AL-31 Series"; break; } return eTypeResult; } private: EngineType etype; mutable std::string eTypeResult; }; کلاس Machine دارای مشخصه‌هایی از نوع سطح دسترسی final و pure می‌باشد که توابع از نوع دسترسی final یک بار برای تمامی کلاس‌های ماشین‌ها تعریف شده و توابع pure برای توسعه در نظر گرفته شده اند. در ادامه ما کلاسی برای خودروی Porsche و کلاسی را برای هواپیمای جنگنده Aircraft در نظر گرفته‌ایم که دارای ویژگی‌های اختصاصی باز تعریف شده تحت نام‌های engineType و غیره می‌باشد. تابع اول برای مشخص سازی نوع موتور ماشین (برای خودرو و هواپیما) و تابع بعدی برای مشخص سازی نوع کد رنگ پیاده سازی شده است. دقت کنید که تابع engineType از کلاس والد مشتق و باز توسعه یافته است که توسط کلمه‌ی کلیدی override مشخص شده است. این کلمه به کامپایلر اعلان می‌کند که تابع تعریف شده دقیقاً همان تابع تعریف شده در کلاس والد است (با همان پارامتر و همان نام و همان نوع) در صورتی که این کلمه استفاده نشود تابع باز تعریف شده توسط کامپایلر خطا گرفته خواهد شد. این کلمه کلیدی برای هشدار به کاربری است که قرار است بر اساس کلاس والد کلاس مخصوص خود را توسعه دهد و صرفاً جهت اطلاع رسانی توسط کامپایلر به کاربر مورد استفاده قرار می‌گیرد. توابع از نوع دسترسی final توابعی هستند که کاربر به هیچ عنوان نمی‌تواند آن‌ها را دستکاری و باز توسعه دهد. برای مثال تابع name به دلیل اینکه نام در تمامی ماشین‌ها از نوع و ورودی یکسانی برخوردار هستند به صورت ثابت تعریف شده است تا کاربر نتواند این ساختار را به هم بزند. زمانی از final استفاده کنید که قرار نباشد ساختار اصلی متدی از کلاس مشتق شده تغییر یابد. همانطور که مشخص است در کلاس پایه ما توابعی را به صورت ثابت تعریف کرده ایم که نیازی نباشد توسعه دهنده مجدداً ساختاری را تولید کند که ممکن نیست خارج از این قالب باشد. حال وقتی قرار باشد وضعیت روشن بودن یا خاموش بودن یک خودرو را بررسی کنیم کافی است متد start را صدا بزنیم، این خاصیت در هواپیمای جنگنده هم وجود دارد بنابراین در هر دوی آن‌ها یکسان است. اما ممکن است برخی از ویژگی‌ها متفاوت باشد. برای مثال قدرت موتور یک خودرو با یک هواپیمای جندگنده یکسان نیست اما ساختار کلاس آن‌ها مسلماً یکی است. بنابراین کافی است از کلاس Machine مشتق گرفته و در کلاس خودرو و هواپیمای جنگنده آن‌ها را به آن صورتی که نیاز داریم باز تعریف (توسعه) دهیم. نتیجه‌ی بر اساس نیازی که از کلاس والد داشته‌ایم به صورت زیر خواهد بود: Car Start Status : 1 Name : Cayman Engine Type : 911 Turbo Total Gears : 8 Power : 6300 Rpm Total Cylinders : 6 Color : Red Width : 1939 mm Length : 4855 mm Aircraft Start Status : 1 Name : Su 35 Engine Type : Saturn AL-31 Series روشی که در مورد آن توضیح دادیم، در پیاده سازی انواع پروژه‌های بزرگ و پیچیده (در صنعت بازی‌سازی، نرم‌افزار‌های یکپارچه و غیره...) کاربرد بسیاری دارید. به عنوان مثال یک موتور بازی سازی پیشرفته و یا کتابخانه‌ها و فریمورک‌های توسعه محصول از چنین ویژگی‌هایی برخوردار می‌باشند. این پُست ممکن است به‌روز رسانی شود.
  3. 4 امتیاز
    در این پُست قصد دارم در رابطه با نحوه‌ی نصب و اجرای برنامه‌های تحت کیوت تحت موارد زیر را توضیح دهم. راهنمای فرایند نصب و استقرار برنامه بر روی پلتفرم Windows راهنمای فرایند نصب و استقرار برنامه بر روی پلتفرم macOS راهنمای فرایند نصب و استقرار برنامه بر روی پلتفرم Linux راهنمای فرایند نصب و استقرار برنامه بر روی پلتفرم Android راهنمای فرایند نصب و استقرار برنامه بر روی پلتفرم iOS قبل از هر چیز لازم است بدانید که برای نصب و راه اندازیِ برنامه‌های نوشته شده تحتِ سی‌پلاس‌پلاس و کتابخانه‌هایِ آن باید پیش‌نیازات آن‌ها درقالب فایل‌هایی از کتابخانه در کنار برنامه قرار بگیرد. راهنمای فرایند نصب و استقرار برنامه بر روی پلتفرم Windows در این محیط نسبت به نوع و نسخه‌ی Qt و کامپایلری که مورد استفاده قرار گرفته است باید توجه داشته باشیم که هنگام کامپایلر و خروجی گرفتن متناسب با سیستم مقصد آن را تهیه کنیم، برای مثال نوع معماری یعنی x64 یا x86 بودن یک سیستم بسیار مهم است. مواردی که باید به آن‌ها هنگام کامپایل توجه کنیم: مشخص سازی نوع کامپایل برنامه حالت یا همان Mode ای که برنامه روی آن ساخته می‌شود، اگر برنامه بر روی Debug ساخته می‌شود تمامی موارد بعدی بر اساس دیباگ تعیین و در غیر اینصورت بر اساس نوع Release مشخص خواهند شد. نوع معماری خروجی در برنامه، باید توجه داشته باشید برنامه‌های 32 بیتی توسط کامپایلرهای x86 یا 32 بیتی تهیه می‌شوند و برنامه‌های 64 بیتی توسط کامپایلر های x64 که خود نیازمند سیستم و بستر برنامه‌نویسی می‌باشند که 64 بیتی هستند، یعنی اگر نیاز باشد برنامه شما 64 بیتی کامپایل شود ابتدا باید سیستم عامل و نسخه کامپایلر محیط توسعه از آن پشتیبانی کند. انواع ماژول‌های استفاده شده در کتابخانه Qt مهم است، به عنوان مثال در حالت عادی ماژول Qt5Core نیاز است ولی اگر در پروژه شما از ماژول‌های دیگری مانند Network استفاده شده باشد در این حالت نیاز خواهید داشت فایل یا ماژول مربوط به آن را وارد برنامه کنید که شامل Qt5Network می‌باشد که لیست کاملی از ماژول‌ها را بر اساس نیاز در ادامه مشخص خواهیم کرد که بر چه اساسی چه نوع ماژول و چه فایلی باید همراه برنامه موجود باشد. شروع کامپایل و گسترش برنامه: معمولاً نسخه های آزمایشی یک محصول در حالت Debug جهت بررسی و آنالیز خطاهای موجود در آن می‌باشد که توسط تیم توسعه‌دهنده یا افرادی که میتوانند در باگ گیری آن همیاری نمایند استفاده خواهند کرد، بنابراین بر فرض اینکه ما قرار است یک نسخه استاندارد و نهایی از محصول را در اختیار کاربر قرار دهیم از حالت Release استفاده خواهیم کرد. در بخش Projects می‌توان نوع کامپایلر و مسیر خروجی از آن را مشخص کرد، دقت کنید که در این بخش قسمت Build بر روی حالت Release باشد، در این مثال ما از کامپایلر MSVC2017 و نسخه ۶۴ بیتی آن استفاده کرده‌ایم که مسیر خروجی آن مشخص است. همانند مک و لینوکس در ویندوز نیز ابزاری با نام windeployqt وجود دارد که در مسیر QTDIR/bin/windeployqt می‌باشد. توسط این ابزار می‌توان برنامه را در قالب یک پکیج جمع آوری و مستقر ساخت. همانند مک و لینوکس در ویندوز نیز ابزاری با نام windeployqt وجود دارد که در مسیر QTDIR/bin/windeployqt می‌باشد. توسط این ابزار می‌توان برنامه را در قالب یک پکیج جمع آوری و مستقر ساخت. برای مثال ما برنامه ای ساخته ایم که در مسیر مورد نظر MyAppRoot//C:/Users/Compez/Desktop می‌باشد. با دستور cd به مسیر فوق خواهیم رفت: cd C:/Qt/Qt5.11.0/5.11/msvc2017_64/MyAppRoot البته قرار است در این مسیر خروجی فایل بعد از کامپایل ایجاد شود که با غیر فعال سازی امکان Shadow Build این ممکن خواهد شد که فایل مربوطه در مسیر ریشه برنامه ایجاد شود. با فرض اینکه بعد از کامپایل فایل MyApplication.app در مسیر ذکر شده موجود باشد دستور زیر را در ترمینال وارد خواهیم کرد: C:/Qt/Qt5.11.0/5.11/msvc2017_64/bin/windeployqt MyApplication.exe دقت کنید که اگر نیاز باشد با استفاده از گزینه‌های موجود در ابزار برنامه خود را مستقر سازید کافی است دستور ایجاد را به صورت زیر وارد کنید: C:/Qt/Qt5.11.0/5.11/msvc2017_64/bin/windeployqt MyApplication.app –verbose=3 –no-plugins در ویندوز بر خلاف ایستگاه‌های یونیکس فراهم آوردن تمامی فایل‌ها در کنار برنامه صورت خواهد گرفت. اما بعد از اجرای دستور فوق برنامه به تنهایی قابل اجرا نخواهد٬ لذا فایل‌های msvcp140.dll و vcruntime140.dl‌ نیاز هستند تا در کنار برنامه قرار گیرند. این فایل‌ها در تمامی نرم‌افزار های بزرگ در کنار برنامه موجود هستند مگر اینکه به صورت جدا پکیج مربوط به آن را نصب کنید که توصیه نمی‌شود. توجه داشته باشید که فایل‌هایی که قبل از پسوند .dll آخر حرف آن‌ها به d ختم می‌شود نشانگر آن است که مربوط به نسخه دیباگ هستند. در صورتی که در حالت Release برنامه خود را کامپایل می‌کنید فایل‌هایی را در کنار برنامه خود قرار دهید که حرف آخر آن‌ها به d ختم نشده باشد. برای مثال فایل QtCored.dll مخصوص نسخه دیباگ بوده و فایل QtCore.dll مخصوص نسخه ریلیز. بعد از کامپایل برنامه و اجرای خروجی آن در ویندوزی که بر روی آن Qt و سی‌پلاس‌پلاس نصب نیست مسلما با خطاهای زیر مواجه خواهیم شد: خطا‌های فوق بیانگر این است که فایل‌های فوق در کنار پروژه یا در هسته سیستم عامل پوشه windows/system32 و یا windows/SysWow64 نصب نشده است که در ادامه برای حل این خطا راهکار ارائه داده شده است. بنابراین به مسیر زیر بروید : C:/Program Files (x86)/Microsoft Visual Studio 2017/Enterprise/VC/Redist/14.x.x/onecore/x64/Microsoft.VC150.CRT سپس فایل‌های موجود در پوشه را کپی و در کنار برنامه قرار دهید در این صورت برنامه بدون هیچ خطایی اجرا خواهد شد. مگر اینکه به جز کتابخانه Qt و STL از کتابخانه‌های دیگری استفاده کرده باشید که در این صورت هم باید فایل‌های مربوط به‌ آن‌ها را در کنار برنامه قرار دهید.
  4. 3 امتیاز

    نگارش 1.3.7

    همانطور که می‌دانید در سال ۹۵ نسخه اول ومقدماتی اولین کتاب برنامه نویسی سی پلاس پلاس همراه با کتابخانه کیوت انتشار یافت، طبق بازخورد‌هایی که از علاقه مندان و خوانندگان کتاب چه در نسخه رایگان و چه در نسخه تجاری به این نتیجه رسیدیم که محتوایی فراتر از محتوای مقدماتی که تحت برنامه نویسی سنتی بود در اختیار شما قرار دهیم. * تمامی حقوق مادی و معنوی این کتاب متعلق به مولف و ناشر مولف (کامبیز اسدزاده) می‌باشد و هرگونه کپی برداری از آن پیگرد قانونی خواهد داشت. توجه : در داشتن هر گونه انتقاد و پیشنهاد در رابطه با این کتاب با آدرس شخصی نویسنده (kambiz.ceo@gmail.com) مکاتبه نمایید. نکته : این کتاب در روز‌های خاص ممکن است شامل تخفیف قرار بگیرد. نکته دوم : کسانی که این کتاب را یک بار خریداری می‌کنند نسخه‌ی به روز رسانی شده آن را به صورت رایگان می‌توانند دریافت کنند. برخی از درخواست‌ها در کتاب مقدماتی به صورت زیر بودند: آموزش پیشرفته در رابطه با QML و آشنایی با آن آموزش برقراری ارتباط بین ++C و QML به صورت بک اند و فرانت اند آموزش کار با کنترل‌ها و نحوه سفارشی سازی پروژه آموزش برقراری ارتباط با پایگاه داده و فناوری های مرتبط با آن آموزش نحوه پیکربندی کیت‌ها٬ کامپایلر و ... آموزش نحوه توسعه برنامه بر روی پلتفرم های مختلف از حمله اندروید٬ آی او اس و ... و درخواست‌های دیگر... بنابراین بر اساس این درخواست‌ها و محتوایی که نیاز می باشد بعد از جلد مقدماتی با آن‌ها آشنا باشید را در این نسخه فراهم کرده ایم. نکته از نظر من در رابطه با محتوا: کتابخانه کیوت شامل مباحث بسیار زیادی است که می‌توان از هزاران صفحه محتوای آموزشی تولید کرد. اما در این محتوای آموزشی من تنها به مواردی اشاره کرده ام که لازمه کار هستند و در پروژه‌ها می‌بایست اطلاعات لازم در رابطه با آن‌ها داشته باشید. هزینه این کتاب چطور و بر چه اساسی خواهد بود؟ همانطور که می‌دانید هزینه مقدماتی کتاب در ویرایش اول و دوم با قیمت ۱۰.۰۰۰ تومان و در ویرایش سوم با قیمت ۲۰.۰۰۰ هزار تومان در اختیار علاقه مندان قرار گرفته است که شامل بهبود و توسعه قالب و محتوای آن بر اساس بازخورد ها بوده است. قیمت این جلد در حال حاضر۶۵.۰۰۰ تومان در نظر گرفته شده است که در قالب A4 با تعداد حداقل فعلی۴۴۶ صفحه‌ی (به‌روز شده) توسعه یافته است و در مرحله اول در قالب PDF منتشر خواهد شد. نسخه چاپی این کتاب چطور خواهد بود؟ آیا برنامه ای برای آن خواهید داشت؟ بر اساس بازخورد‌هایی که داشته ایم بیش از ۸۵ درصد علاقه مندان مایل به دریافت نسخه الکترونیکی کتاب بودند که در آن می‌توانند به راحتی کد‌های نوشته شده را در محیط توسعه خود کپی کنند بنابراین نسخه الکترونیکی در اولویت اول قرار گرفته است که می‌توان در کمترین زمان ممکن آن را آماده کرد. اما در رابطه با نسخه چاپی باید طبق مراحل مورد نیاز زمانی را صرف عقد قرارداد و توافق با ناشر در نظر بگیریم که ممکن است چند ماه بعد از نسخه الکترونیکی به تصویب رسیده و منتشر شود. (فعلا تصمیم قطعی در رابطه با این موضوع گرفته نشده است) این بستگی به استقبال علاقه مندان خواهد داشت و هزینه آن با نسخه الکترونیکی مجزا خواهد بود. سرفصل ها و محتوا چه چیز‌هایی هستند؟ محتوای کتاب طبق آخرین استاندارد کتابخانه بر پایه نسخه ۵.۸ به بالا می‌باشد. محتوای آن به نسخه ۵.۹ و حتی ۵.۱۰ به صورت پیش نویسه به روز رسانی شده است. همچنین ویژگی های و موارد مهمی که در نسخه ۵.۹ و ۵.۱۰ موجود هستند در این کتاب به آن‌ها اشاره شده است. سر فصل‌های نهایی و تایید شده کتاب: فصل اول مقدمه بر زبان ++C برخی از قابلیت‌ها ساختار برنامه در ++C کتابخانه‌ها فرق بین C و ++C ویژگی‌های معرفی شده در ++C ویرایش‌های ۱۱ ٬ ۱۴ و ۱۷ کامپایلر‌های ++C و وضعیت آن‌ها ساختار اسناد ++C در پروژه‌ کاربرد این زبان در کجاست؟ استاندارد‌های زبان مقدمه کیوت (Qt) معرفی کیوت (Qt) ۵.۹ آشنایی با محیط توسعه، نصب و راه اندازی همراه با پیکربندی کیت (Kit) در آن نصب و راه اندازی محیط Qt پیکربندی کیت‌ها در macOS پیکربندی کیت‌ها در Linux پیکربندی کیت‌ها در Windows معرفی محیط توسعه کیوت کرِیتور (Qt Creator) نسخه 4 پیکربندی و تنظیمات مربوط به ساخت برای پلتفرم‌های مختلف معرفی مجوز های Qt و نحوه استفاده از مناسبترین مجوز لوگو‌های نشانگر ساخته شده با Qt پشتیبانی از انواع پلتفرم‌ها پشتیبانی از انواع معماری ها شرایط و قوانین لازم جهت انتشار اپلیکیشن در فروشگاه iTunes یا همان (Apple Store) شرایط و قوانین لازم جهت انتشار اپلیکیشن در فروشگاهWindows Store شرایط و قوانین لازم جهت انتشار اپلیکیشن در فروشگاه Google Play شرایط و قوانین اختصاصی برنامه تحت Qt جهت انتشار و پذیرش در فروشگاه های مرتبط فصل دوم معرفی فناوری Qt Quick ویرایش 2 معرفی زبان کیو اِم اِل (QML) ویرایش 2 آشنایی با سبک - سینتَکس (Syntax) زبان QML روش اعلام یا اظهار یک شیء در QML اشیاء فرزند (Child-Object) در QML سبک و روش اعمال اظهار نظر (Comment) در QML صفت های اشیاء در QML پشتیبانی از جاوا اسکریپت (JavaScript) و ترکیب آن با QML روش استفاده از جاوا اسکریپت در سند QML روش های ترکیب ++C و استفاده از آن در سند QML فصل سوم معرفی انواع پروژه ها تحت فناوری کیوت کوئیک (Qt Quick) معرفی پروژه از نوع Qt Widget Application معرفی پروژه از نوع Qt Console Application معرفی پروژه از نوع Qt Quick Application معرفی پروژه از نوع Qt Quick Controls 2 Application معرفی پروژه از نوع Qt Quick Controls Application معرفی پروژه از نوع Qt Quick Canvas 3D Application معرفی پروژه از نوع Qt Quick Labs Controls Application آغاز ایجاد پروژه تحت C++ و Qt Quick ساده ترین برنامه معرفی کلاس QGuiApplication معرفی کلاس QQmlApplicationEngine معرفی کلاس QCoreApplication معرفی تابع exect در پروژه فصل چهارم انواع کنترل ها، منو ها و دیگر آبجکت ها معرفی انواع QML پایه در فناوری Qt Quick نوع date نوع color نوع font نوع matrix4x4 نوع point نوع quaternion نوع rect نوع size نوع vector2d نوع vector3d نوع vector4d معرفی انواع اشیاء QML در فناوری Qt Quick معرفی Accessible معرفی AnchorAnimation معرفی AnchorChanges معرفی AnchorImage معرفی AnimatedSprite معرفی Animation معرفی AnimationController معرفی Animator معرفی Behavior معرفی BorderImage معرفی Contex2D معرفی Canvas معرفی CanvasGradient معرفی CanvasImageData معرفی CanvasPixelArray معرفی CanvasColorAnimation معرفی Column معرفی DoubleValidator معرفی Drag معرفی DragEvent معرفی DropArea معرفی EnterKey معرفی Flickable معرفی Flipable معرفی Flow معرفی FocusScope معرفی FontLoader معرفی FontMeteric معرفی Gradient معرفی GridMesh معرفی GridView معرفی Image معرفی IntValidator معرفی Item معرفی ItemGraResult معرفی KeyEvent معرفی KeyNavigation معرفی Keys معرفی LayoutMirror معرفی ListView معرفی Loader معرفی MouseArea معرفی MouseEvent معرفی MultiPointTouchArea معرفی NumberAnimation معرفی OpacityAnimator معرفی ParallelAnimation معرفی GraphicInfo معرفی ParentAnimation معرفی ParentChange معرفی Path معرفی PathAnimation معرفی PathView معرفی PauseAnimation معرفی PropertyAction معرفی PropertyChanges معرفی Rectangle معرفی RegExpValidator معرفی Repeater معرفی Rotation معرفی RotationAnimation معرفی RotationAnimator معرفی Row معرفی Scale معرفی ScaleAnimator معرفی SecuentialAnimation معرفی ShaderEffect معرفی ShaderEffectSource معرفی Shortcut معرفی SmoothedAnimation معرفی SpringAnimation فصل پنجم معرفی انواع کنترل های 2 Qt Quick Controls کنترل AbstractButton کنترل ApplicationWindow کنترل BusyIndicator کنترل Button کنترل ButtonGroup کنترل CheckBox کنترل CheckDelegate کنترل ComboBox کنترل Container کنترل Control کنترل Dial کنترل Drawer کنترل Frame کنترل GroupBox کنترل ItemDelegate کنترل Label کنترل Menu کنترل MenuItem کنترل Page کنترل PageIndicator کنترل Pane کنترل Popup کنترل ProgressBar کنترل RadioButton کنترل RadioDelegate کنترل RangeSlider کنترل ScrollBar کنترل ScrollIndigator کنترل Slider کنترل SprinBox کنترل StackView کنترل SwipeDelegate کنترل SwipeView کنترل Switch کنترل SwitchDelegate کنترل TabBar کنترل TabButton کنترل TextArea کنترل TextField کنترل ToolBar کنترل ToolButton کنترل ToolTip کنترل Thumbler فصل ششم معرفی Qt Quick Dialog (دیالوگ های انتخاب رنگ، فایل، فونت و پیغام) معرفی Color Dialog معرفی Font Dialog معرفی File Dialog معرفی Message Dialog معرفی Qt Quick Layouts معرفی Column Layout معرفی Grid Layout معرفی Row Layout معرفی Stack Layout معرفی Qt Quick Control Styles (سبک و استایل نویسی کنترل ها – سفارشی سازی) واکنش گرایی و پاسخ دهی محتوای وب در اپلیکیشن با Qt WebEngine محتوای چند رسانه ای در کیوت QMultimedia محتوای چند رسانه ای در کیوت QMultimedia پخش صوت ظبط صدا در فایل پخش ویدیو کار با دوربین فصل هفتم معرفی و پیکربندی کار با بانک اطلاعاتی (دیتابیس) کار با بانک اطلاعاتی و ارتباط آن بین C++ و QML معرفی و کار با XML معرفی و کار با JSON معرفی و کار با QSetting سفارشی سازی فایل .pro پروژه فصل هشتم مقایسه انواع حالت های کامپایل Debug و Release نحوه افزودن دیگر کتابخانه های C++‎‎ در محیط Qt Creator و استفاده همراه با کتابخانه Qt فرق بین کامپایل استاتیک و داینامیک نحوه خروجی گرفتن / گسترش (Deployment) در Qt پیکربندی و انتشار برنامه در پلتفرم ویندوز (Windows) پیکربندی و انتشار برنامه در پلتفرم مک (macOS) پیکربندی و انتشار برنامه در پلتفرم لینوکس (Linux) پیکربندی و انتشار برنامه در پلتفرم‌های iPhone و iPad (iOS) پیکربندی و انتشار برنامه در پلتفرم اندروید (Android) معرفی ابزار کیوبس (QBS) به روز رسانی کیوت بدون دریافت فایل نصبی آفلاین اهداف نسخه‌های ۵.۱۰ و ۶ پیشنهادات و ملاحظات در عملکرد و کارآیی (جدید)

    650٬000 ریال

  5. 3 امتیاز
    امروز می‌خوام برای شروع کار نمونه مثال ساده ای رو که بخشی از کامپوننت‌های پروژه Jupiter برای شرکتمون بود قرار بدم. این نمونه شامل یک کنترل ورودی InputBox و Button با یک افکت و انیمیشن ملایم سفارشی شده است که قابلیت‌های شناور ماوس، واکنش دادن به ورودی و وضعیت نتیجه‌ی ورودی می‌باشد که ظاهری مشابه و حتی بهتر از Bootstrap 4.x را دارد. در این مثال فرم به صورت سفارشی به ورودی زبان، قالب ایمیل و تلفن حساس است. فرم در حالت عادی مقدار ورودی (نوع زبان) به غیر از فارسی نامعتبر تشخیص داده می‌شود. تایید ورودی‌های معتبر ویژگی‌های title، placeHolder، language، email و mobile در کنترل InputBox قابل تنظیم هستند. به عنوان مثال زمانی که شما مشخصه‌ی email را برابر true قرار دهید می‌توانید مقدار ورودی پست الکترونیکی را ارزیابی کنید. مثال : Controls.InputBox { id:email; title: "آدرس ایمیل"; email: true; placeHolder: "info@iostream.ir" } مثال : Controls.InputBox { id:firstname; title: "نام"; language: true; placeHolder: "کامبیز"; } Controls.InputBox { id:lastname; title: "نام خانوادگی"; language: true; placeHolder: "اسدزاده" } Controls.InputBox { id:mobile; title: "شماره تلفن همراه"; mobile: true; placeHolder: "09140000000" } Controls.InputBox { id:email; title: "آدرس ایمیل"; email: true; placeHolder: "info@iostream.ir" } مقادیر پرچم به صورت پیشفرض برابر با false هستند. زمانی که شما مقدار یکی از مشخصه‌های بالا را مشخص نکنید آن false در نظر گرفته می‌شود. مشخصه‌ی پست الکترونیکی شماره تلفن‌های همراه اول و ایرانسل را پشتیبانی می‌کند. شما می‌توانید برای مشاهده منبع کُد و همچنین نحوه‌ی برنامه‌نویسی این مثال فایل ضمیمه را دریافت کنید. Jupiter-Component(InputBox).zip
  6. 2 امتیاز
    این تاپیک مخصوص نمونه مثال‌هایی از پروژه‌ها، ماژول‌ها، کامپوننت‌ها و افزونه‌هایی می‌باشد که به صورت استاندارد و مدرن توسط سی‌پلاس‌پلاس و جاوا‌اسکریپت تحت فناوری Qt Quick طراحی می‌شوند. بدون هیچگونه تعارفی باید بگوییم هر نرم‌افزار (اپلیکیشن) و یا محصولی که ساخته می‌شود باید مطابق استاندارد‌هایی که مهندسین طراحی بر روی آن تاکید دارند توسعه یابد. این استاندارد‌ها ممکن است شامل اصول کُدنویسی، الگو‌های کد‌نویسی و یا قوانین روانشناسی رنگ‌ها، چیدمان اشیاء و هر موردی که می‌تواند در نتیجه‌ی آن تاثیر مثبت داشته باشد مهم هستند. با هدف اینکه می‌خواهیم نمونه مثال‌هایی را برای تازه واردین قرار دهیم تا بتوانند به درستی ونحوه‌ی صحیح طراحی و پیاده سازی دو بخش بک‌اِند و فرانت‌اِند آشنا شوند، نمونه مثال‌های شما باید دارای شرایط زیر باشند ساختار استاندارد کلاس‌ها و توابع در سمت سی‌پلاس‌پلاس استفاده از اشاره گر‌های هوشمند و یا رعایت اصول مدیریت حافظه استفاده از ماکرو‌های سفارشی iOS، Android، Windows، macOS و لینوکس جهت مدیریت بهتر بعضی از ویژگی‌های منحصربفرد سیستم‌عامل‌ها تا جایی که می‌توانید سعی کنید از ابزار‌های qmake و qbs در این نمونه مثال‌ها استفاده کنید رعایت رنگ‌بندی و همچنین اصول UX درست مهم است مثال شما باید برگرفته و بر اساس استاندارد‌های توصیه شده‌ی doc.qt.io باشد. استفاده‌ی بهینه از لنگر‌ها و همچنین ترازبندی صحیح لایه‌ها و نگه‌دارنده‌ها در سمت QML استفاده از تصاویر و یا قالب‌های استاندارد و سبک مانند SVG, PNG و base64 استفاده از فونت آیکونیک‌ها مانند (FontAwesome) این پست ممکن است ویرایش و یا به روز‌رسانی شود. در ادامه شما می‌توانید بر اساس شرایطی که ذکر شده است و با توجه به استاندارد‌های Google Material، Microsoft Fluent و همچنین Apple Human Interface نمونه مثال‌های خود را ارائه دهید که برخی از مثال‌های استاندارد در زیر آمده اند.
  7. 1 امتیاز
    با سلام، با توجه به سوالات مکرر برخی از کاربران و خصوصاً دانشجویان جدید، تصمیم گرفته شد تا توضیحاتی درباره‌ی نحوه‌ی یادگیری برنامه‌نویسی با سی‌پلاس‌پلاس بیان شود. مقدمه در حال حاضر بیش از ۳۳ سال است که از ساخت و معرفی زبان برنامه‌نویسی ++C می‌گذرد. در رابطه با آن‌ که هدف از ایجاد این زبان چه چیزی بوده و مزایای آن نسبت به زبان‌های دیگر چه چیزی است را می‌توانید در این تاپیک را مطالعه کنید. اما بسیاری از افراد علاقه‌مند به زبان‌های برنامه‌نویسی تمایل بسیاری دارند تا در برنامه‌نویسی با این زبان به درجه مطلوب و درواقع (حرفه‌ای) برسند. قبل از هر چیز باید مواردی را در نظر داشته باشیم که یاد گیری زبان‌های برنامه‌نویسی به خودی خود کافی نیست! مخصوصاً زبان‌‌های C و ++C مستلزم پیش‌نیاز‌های تخصصی بسیاری هستند که در روند تولید، توسعه، تجزیه و تحلیل رفتار کامپایلر و سیستم‌عامل بسیار مهم است. در ادامه ما به سوالاتی که معمولاً توسط تازه‌کاران پرسیده شده است پاسخ داده ایم: قبل از رسیدن به پاسخ سوالات خود به این نکته حتماً توجه کنید که زبان‌های برنامه‌نویسی بسیاری وجود دارد که ممکن است بدون داشتن اطلاعات تخصصی در رابطه با سیستم‌عامل، کامپایلر، انواع معماری‌های سیستمی و غیره موفق به یادگیری آن‌ها شوید. اما در این میان زبان سی++ چنین ویژگی‌ای ندارد (کاربر را به چالش می‌کشد) و شما باید قبل از زبان به عنوان پیش نیازات یادگیری و درک آن از مباحث مهندسی نرم‌افزار، سیستم‌عامل (ساختار و معماری آن)، ساختار و معماری کامپایلر‌ها و رفتار‌های آن‌ها، سخت‌افزار و نوع معماری پردازنده‌ها و موارد این چنین آشنا شوید. کاملاً روشن است که یادگیری چنین مباحثی سنگین بوده و بدون شک شما باید در حوزه‌ی مهندسی کامپیوتر به خصوص نرم‌افزار کسب علم نمایید. ابعاد علمی و اقتصادی کار با ++C/C در ایران متاسفانه اکثر ما ملتی هستیم، تَنبَل و حاضر برای لُقمه‌ی آماده بنابراین بازار کار در ایران به گونه‌ای است که بیشتر شرکت‌ها و افراد توسعه دهنده به سراغ زبان‌های ساده‌تر و در دسترس‌تر (بی دردسر) می‌روند. غافل از آن که یک برنامه‌ی تولید شده توسط سی++ بسیار سریع، جذاب، قدرتمند و انعطاف‌پذیر تر است. تمامی مساله در اینجا تمام نمی‌شود، چرا که شاید در سال‌های اخیر وضعیت تقریباً فرق کرده و به کمک اطلاع رسانی‌های اساتید و دوستان حرفه‌ای ما در این زمینه این اطلاع رسانی به خوبی صورت گرفته و توسعه دهنده‌ها از قابلیت‌ها پنهان این زبان آگاه شده اند. شرکت‌ها و گروه‌های برنامه‌نویسی بسیاری به دنبال برنامه‌نویس‌های سی++ و کیوت هستند که این امر نشان دهنده‌ی این است که نسبت به سال‌های گذشته پیشرفت و آگاهی جامعه در این حوزه منطقی تر و بهتر شده است. بنابراین، بهتر است قبل از هرچیز در نظر داشته باشید که هدف از این تاپیک، این نیست که اثبات کنیم یک زبان نسبت به زبان دیگر برتری دارد. هدف اصلی ما این است به واقعیت‌هایی اشاره کنیم که غیر منطقی نیستند. چرا که واقعاً کارفرمایانی وجود دارند که نیازمند به برنامه‌نویسانی هستند که تخصص خوبی در زبان‌های برنامه‌نویسی دیگری مانند سی و سی++ دارند. متاسفانه در کشور ما اینگونه است که به ازای مثلاً هر ۱۰۰ نفر سی‌شارپ کار یا زبان‌های دیگر ۱ نفر سمت سی++ می‌رود! و این روند برای توسعه صنعت نرم‌افزاری کشور که بسیاری از کارفرمایان به آن نیاز دارند ضربه‌ی سختی وارد می‌کند. توجه داشته باشید که هدف از این توضیحات چنین نیست که بعد از خواندن این مطالب زبان برنامه‌نویسی مورد علاقه‌ی خود را کنار گذاشته و به سمت سی++ بروید، خیر! تمامی زبان‌ها به عنوان ابزار‌های کاری شما در یک جعبه‌ی ابزار هستند و هر زبانی حوزه‌ی کاربردی خودش را دارد. بنابراین قبل از اینکه شما تصمیم بگیرید که چه زبانی را یاد خواهید گرفت باید حوزه‌ی کاری وعلاقه‌ی خودتان را مشخص کنید سپس وارد تحقیق و بحث و نظر خواهی راجع به آن زبان نمایید. بنابراین مقایسه‌ی زبان طبق این قانون کاملاً کار اشتباه و بچه‌گانه است. متاسفانه به خاطر تفکرات اشتباه و معرفی‌های غیر منطقی و غیر علمی برنامه‌نویسان کشور ما که ممکن است حتی خودِ شما هم چنین تصور کنید، در رابطه با سایر زبان‌ها مانند سی++ بسیاری از کارفرمایان نیازمند چنین برنامه‌نویسانی هستند که در کشور ما واقعاً نیاز است. توجه داشته باشید که انتخاب درست این نیست که چون همه سراغ سی‌شارپ می‌روند و چون تمامی آگهی‌ها استخدامی مرتبط با سی‌شارپ است پس فقط باید این زبان را یاد گرفت و تمام! خیر چنین تفکری اشتباه است و ضربه‌ی بسیار بزرگی در صنعت و دانش آینده‌ی کشور خواهد زد. *نکته‌ی مهم و جالبی که وجود دارد این است که در خارج از کشور بیشترین دست‌مُزد متعلق به برنامه‌نویسان سی++ می‌باشد. در کشور ما برنامه‌نویسان این زبان دست‌مُزد مناسبی می‌توانند بگیرند اما به هیچ عنوان قابل مقایسه با دستمزد‌های خارج از کشور نیست (اما خارج از بحث اقتصادی حال حاضر ممکن است قابل تأمل باشد). نکاتی در این میان وجود دارد که باید به آن‌ها اشاره کرد: متاسفانه در کشور ما بسیاری از برنامه‌نویسان چه مبتدی چه حرفه‌ای اینطور تصور می‌کنند که تولید محصول نرم‌افزاری یعنی برنامه‌نویسی یک نرم‌افزار که قرار است به بانک اطلاعاتی متصل شده و کار‌هایی مانند ثبت و ویرایش اطلاعات و در نهایت گزارش گیری و دیگر عملیات ممکن را انجام دهد! این تفکر به شدت اشتباه است! بسیاری از بانک‌ها و شرکت‌های صنعتی و اقتصادی مهم کشور نیازمند برنامه‌نویسان سی++ هستند تا بتوانند در بحث بانکی برای توسعه دستگاه‌های پرداخت مانند Pos و ATM از این زبان‌ و برنامه‌نویسان بهره‌ ببرند. در صنایع بزرگ خودرو سازی یا پرس و دیگر موارد نرم‌افزار‌های مورد نیاز است تا با سرعت بسیار و بدون محدودی پلتفرمی پاسخگوی یک چرخه‌ی تولید باشند تا بتواند یک شرکت بزرگ را مدیریت و آن را بهینه کند. در بسیاری از حوزه‌های صنعتی کشور شرکت‌های غول‌پیکر در زمینه‌ی تولیدات انبوه و سنگین که توسط ماشین‌آلات صورت میگیرد به دنبال برنامه‌نویسان سی و سی++ هستند که ممکن است به صورت معرف یا آشنا با آن‌ها مواجه و استخدام شوید. شرکت‌های سخت‌افزاری و استارت‌آپ‌هایی که در حوزه‌ی الکترونیک و سخت‌افزار فعالیت می‌کنند به دنبال برنامه‌نویسیان سی++ هستند تا بتوانند در حوزه‌ی کاری خود اهداف خود را توسعه و شما را به عنوان مهره‌ای مفید پیش ببرند. شرکت‌های توسعه‌دهنده‌ی موبایل و خطوط تولیدی تلفن‌های همراه داخلی گسترش یافته و به شدت نیازمند برنامه‌نویسان سی++ هستند که برخی از آن‌ها مبادلات بین‌المللی نیز دارند. در بخش حوزه‌ی شهر سازی، مدیرت شهر و همچنین راه‌‌‌داری شرکت‌هایی هستند که برای تولید سیستم‌های مدیریتی مانند مدیریت راه‌ها و تردد‌های خودرو و یا مدیریت ترافیک و موارد این چنینی به دنبال برنامه‌نویسان سی++ هستند. بسیاری از شرکت‌ها و حتی تیم‌های توسعه بر روی پلتفرم‌های iOS و Android به صورت تخصصی سفارشی سازی و حتی ساخت و توسعه‌ی اپلیکیشن‌های ایرانی تمرکز دارند که جدیداً به لطف آگاهی از فریم‌وُرک‌هایی مانند Qt به سمت این حوزه آمده و نیازمند سی++ کاران هستند. شرکت‌های بازی‌سازی کشور ما که این سال‌ها با پیشرفت‌های خوبی مواجه شده‌اند به دنبال برنامه‌نویسان سی++ هستند که بتوانند در این صنعت برای فرهنگ‌سازی و توسعه صنعت بازی سازی جلو بروند. بسیاری از شرکت‌های پنهان وجود دارد که به صورت بسیار مخفیانه در صنایع سه‌بعدی و پیشرفته‌ در حال فعالیت‌ هستند که محصولات خود را نه در ایران بلکه در خارج از آن آمریکا و دیگر کشور‌های اروپایی به فروش می‌رسانند که به سفارش آن‌ها بوده است. با دید سطحی به این مسائل نباید نگاه کنید، اگر آگهی‌های استخدامی نمیبینید به خاطر این است که این زبان کار کُن می خواهد نه تَنبل! بنابراین شما باید به سراغ آن بروید چرا که بسیاری از شرکت‌های بین‌المللی فعالیت‌های بزرگی انجام می‌دهند که هیچوقت از آن‌ها خبر ندارید و به صورت کاملاً سفارشی و حساسیت کامل به دنبال برنامه‌نویسان این زبان هستند (چون می‌دانند یک سی++ کار هدفمند و با دید بازتری به توسعه نگاه می‌کند). چنین شرکت‌ها معمولاً استخدام را به صورت رابطه‌ای انجام می‌دهند و تعداشان هم کم نیست. ما می‌دانیم که شاید شما با دیدگاه اینکه حتماً باید نرم‌افزار‌های کاربردی تولید کنید به قضیه نگاه می‌کنید، خوشبختانه فریم‌ورک‌ کیوت به قدری قدرتمند و پُخته شده است که می‌توان هر محصول کاربردی در هر زمینه‌ای را تولید کرد که از کارایی بسیار بهتری نسبت به دات نت بهره‌مند است. در حوزه‌ی امنیت، شبکه و موارد این چنینی شرکت‌های بزرگ و Isp‌ها نیازمند این زبان هستند. نکته‌ی قابل توجه این که، اگر در کشور ما از چند صد هزار نفر برنامه‌نویس سی‌شارپ کار یک برنامه‌نویس سی++ کار وجود داشته باشد باید امیدوار باشیم که همان درصد محدود و ناچیز راه درستی را رفته‌اند! البته دلایل بسیاری وجود دارد که موجب می‌شود شرکت‌ها از روی ناچاری به سراغ برنامه‌نویسان دیگر بروند، که من شخصاً آن را تجربه کرده ام ! در بسیاری از پروژه‌ها که به عنوان مشاور فنی در آن‌ها شرکت کرده بودیم متوجه آن شدیم شرکت‌ها به خاطر عدم وجود برنامه‌نویس سی++ برای ادامه‌ی چرخه‌ی تولید خود مجبوراً سراغ برنامه‌نویس‌های دیگر زبان‌ها می‌روند. این امر به خاطر این است که واقعاً درصد تعداد برنامه‌نویسان این زبان نسبت به زبان‌های دیگر به خاطر (راحت طلبی) و شاید عدم آگاهی از این زبان دور هستند. برخی از سوالاتی که علاقه‌مندان به این حوزه می‌پرسند در ادامه آمده است: من یک دانشجو هستم و رشته‌ی تحصیلی من کامپیوتر است، به برنامه‌نویسی با ++C علاقه دارم از کجا باید شروع کنم؟ اگر شما به قصدِ حرفه‌ای شدن دنبال یادگیری این زبان هستید، همانطور که اشاره‌ای شد مباحث پیش نیاز برای یادگیری این زبان مهم هستند و برای درک هرچه بیشتر این زبان بهتر است دانش خوبی در زمینه‌ی تجزیه و تحلیل رفتار کامپایلر داشته باشید. علاوه بر این برای آشنایی با کامپایلر رفتار سیستم‌عامل و واکنش‌های کامپایلری در سیستم‌عامل‌های متفاوت بسیار مهم است. به عنوان مثال کامپایلر GCC بر روی ایستگاه‌های یونیکس تعبیه شده و برای خود قوانین و استاندارد‌هایی را دارد. در کنار آن کامپایلر MSVC نوعی کامپایلر اختصاصی تحت ویندوز است که متناسب با ساختار و معماری ویندوز رفتار می‌کند. من یک دانشجو هستم اما متاسفانه رشته‌ی تحصیلی من کامپیوتر نیست، به برنامه‌نویسی با ++C علاقه دارم از کجا باید شروع کنم؟ این کار کمی دشوار است، در مرحله‌ی اول پیشنهاد ما این است که سراغ زبان‌های برنامه‌نویسی دیگری بروید که نیازی نداشته باشد شما درگیر درک کامپایلر یا رفتار‌های سیستم‌عاملی شوید. اما به هر حال اگر شما به هر نحوی می‌خواهید این زبان را یاد بگیرید چاره‌ی کار تلاش مستمر و حوصله است. متاسفانه سی‌پلاس‌پلاس ذاتی مرموز دارد و آن این است که اگر بتوانید به آن مسلط شوید یک زبان با وفا و قدرتمندی خواهد بود که در هر زمینه‌ای به نیاز‌های شما پاسخگو خواهد شد. اما اگر به هر دلیلی نتوانید با این زبان دوست شوید به طور بسیار مرموزی اعصابتان را به هم خواهد ریخت که البته طبیعی است چون سی++ تحت کامپایلر‌های خود دستِ برنامه‌نویس را آزاد گذاشته و شما هستید که انتخاب می‌کنید کُد شما به چه شیوه‌ای با توجه به هدف چگونه عمل کند. چقدر زمان لازم است تا من این زبان برنامه‌نویسی را یاد بگیرم؟ با توجه به ساختار زبان و رفتار‌های کامپایلر می‌توان گفت به قدری دامنه‌ی سی++ گسترده است که تنها راه حل ممکن برای رسیدن به یک وضعیت مطلوب از دانش مرتبط با آن باید زمان مشخصی در نظر گرفته شود. ممکن است شما بتوانید در بازه‌ی ۱ الی ۳ ماه مباحث مقدماتی این زبان را درک کنید. اما توجه داشته باشید پیش‌نیازات آن نیز نیازمند تحقیق، تجربه عملی و نتیجه‌گیری تئوری و علمی هستند. با توجه به اینکه شما (سریع، هوشمند با گیرایی بالا باشید) می‌توانید در کمتر از ۶ ماه به یک پایداری تقریباً قابل قبول در حد مقدماتی این زبان برسید. استاندارد زبان را درک کنید و نحوه‌ی برقراری ارتباط با کتابخانه‌های پیشفرض STL و غیره را تجربه کنید. برای کسب دانش و افزایش آن به میزان متوسط و به بالا نیازمند تلاش بسیار بیشتری خواهید بود که باید در قالب پروژه‌های عملی و واقعی صورت گیرد. متاسفانه سی++ به دلیل گسترده‌ بودن چنان پیچیدگی‌هایی را دارد که تنها می‌توان در موقع برنامه‌نویسی به صورت عملی (بر روی پروژه‌های واقعی) آن را تجربه کرد. آیا ارزش دارد من این زبان را یاد بگیرم؟ فرصت من کم است و می‌خواهم سریعاً به درآمد زایی برسم اگر شما به عنوان یک برنامه‌نویس متوسط و به بالا به این زبان تسلط دارید، و حداقل می‌توانید با یکی از کتابخانه‌های خوب آن ارتباط برقرار کنید باید به شما تبریک گفت. وقت آن است که با کتابخانه‌های قدرتمند این زبان وارد عمل شوید. کتابخانه‌هایی مانند Boost، Poco، Qt و غیره از سری کتابخانه‌هایی می‌باشد که امکانات بسیاری را در اختیار شما علاقه‌مندان این زبان قرار می‌دهند تا بتوانید در کمترین زمان ممکن به نیاز‌های خود دسترسی داشته و آن را پیاده سازی کنید. توجه داشته باشید که لازمه‌ی طراحی و توسعه یک محصول مفید (قابل قبول) در قالب MVP (کمینه محصول پذیرفتنی) مستلزم داشتن دانش طراحی محصول نیز می‌باشد. اما همه چیز اینگونه خلاصه نشده است و شما برای اینکه بتوانید یک محصول واقعاً قابل قبول را پیاده سازی کنید مسلماً باید آن را مجهز به قابلیت‌های دیگری مانند منابع ذخیره‌ داده و یا سرویس‌ها و ماژول‌هایی کنید که بتواند به عنوان یک محصول کاربردی روی آن حساب کرد. کاملاً روشن است که علاوه بر پیش‌نیازاتی که به آن‌ها در بالا اشاره شده است، داشتن دانش در رابطه با SQL، معماری وب سرویس‌ها و ساختار Api ها، طراحی رابط کاربری تحتِ Xml، QML، JavaScript و حتی شبکه و اینترنت نیاز خواهد بود. با توجه به این موارد اگر بخواهید محصولی را بسازید که طبق استاندارد‌ آن را توسعه و تولید کنید باید ابزار‌ها و موارد پیشنهادی زیر را در اختیار داشته و به تک به تک آن‌ها مسلط باشید: یک محیط توسعه یکپارچه‌ی نرم‌افزار مانند Qt Creator، Xcode یا Visual Studio (پیشنهاد ما Qt Creator است). پلتفرم توسعه (سیستم‌عاملی) که قرار است محیط توسعه‌ی یکپارچه خود را بر روی آن نصب و شروع به برنامه‌نویسی کنید را مشخص نمایید. اگر شما کاربر ویندوز هستید باید محیط توسعه‌ی یکپارچه‌ی شما مجهز به کامپایلر MSVC و یا نسخه‌ی پورت شده‌ی GCC یعنی MinGW باشد. اگر شما کاربر مک‌او‌اِس هستید به صورت پیشفرض با نصب محیط توسعه کامپایلر Clang بر روی آن تعبیه خواهد شد. البته می‌توانید به صورت سفارشی از کامپایلر GCC نیز استفاده کنید. در صورتی که کاربر لینوکس هستید کامپایلر GCC به صورت پیشفرض بر روی محیط توسعه‌‌ی شما تعبیه خواهد شد. بر اساس پیشنهاد ما جهت محیط توسعه‌ کتابخانه‌ی Qt نیز پیشنهاد می‌شود (دلیل آن این است که این کتابخانه به شما کمک می‌کند تا بتوانید رابط کاربری نرم‌افزار (محصول) خود را پیاده سازی کنید). اگر هدف شما طراحی یک محصول استانداردی است که از شکل و ظاهر آن‌چنانی برخوردارد نیست بهتر است از ماژول‌های پیشفرض Qt مانند Qt Widget برای طراحی آن استفاده کنید. این کار بسیار ساده است و نیازی برای داشتن دانش در رابطه با حوزه‌های JavaScript و QML ندارد. البته می‌توانید با ترکیب CSS طراحی رابط کاربری برنامه‌ی خود را بهبود ببخشید. بعد از این موارد نیاز است که شما هدف توسعه‌ی خود را مشخص کنید، اینکه می‌خواهید توسعه دهنده‌ی چه پلتفرمی باشید؟ تولید کننده برنامه‌های دسکتاپ بر روی ویندوز؟ یا لینوکس و مک؟ یا همه‌ی آن‌ها؟ خوشبختانه با توجه به قابلیت‌های ذاتی سی++ و کیوت شما می‌توانید برنامه‌ی خود را تنها با داشتن محیط توسعه‌ی خود بر روی پلتفرم مورد نظر خود کامپایل و خروجی بگیرید (البته به شرط اینکه از سرویس‌های اختصاصی سیستم‌عاملی) استفاده نکرده باشید. اگر مشتاق آن هستید که برای پلتفرم‌های موبایل مانند آی‌او‌اس یا اندروید برنامه تولید کنید، قضیه کمی گسترده تر خواهد شد و حتماً باید ملزوماتی که در ابتدای مقاله به آن اشاره شده است را در نظر داشته باشید. برای مثال تولید یک اپلیکیشن آی‌او‌اس مستلزم آن است که شما علاوه بر داشتن دانش سی++ در رابطه با معماری و ساختار و همچنین قوانین سیستم‌های مرتبط با اپل را اطلاعات کافی داشته باشید. در اندروید نیز این چنین است. اگر شما تازه کار هستید پیشنهاد می‌کنیم هدف خود را فعلاً محدود بر یک پلتفرم خاص کنید، برای مثال توسعه محصول بر روی ویندوز برای آغاز کار بسیار مناسب است. در نهایت شما محصول خود را با آزمایش وخطا‌های بسیاری می‌توانید تولید و با توجه به مستنداتی که در همین مرجع ارائه شده است می‌توانید مستقر و برای کاربر مورد نظر ارائه دهید. برای اینکه بدانید مزایای این زبان در چیست و چه کتابخانه‌هایی می‌توانند مفید باشد و برخی از سوالات احتمالی که ممکن است به ذهن شما برسد این بخش را مطالعه کنید. برای نحوه‌ی شروع کار با Qt این بخش را مطالعه کنید. جهت نحوه‌ی نصب و راه اندازی محیط توسعه این بخش را مطالعه کنید.
  8. 1 امتیاز
    برای وب سرویس‌ها شما می‌تونید تحت زبان‌های مختلفی این کار رو سمت سرور انجام بدین. با همین سی‌++ هم میشه اما پیشنهادم اینه برای شروع کار از PHP استفاده کنید. مثال ساده از Php برای ساخت وب‌سرویس از نوع Restful یک مخزن مفید از Php برای ساخت Api یک مخزن مفید از ++C برای ساخت Api تحت Poco اینم یک سری مقالات در رابطه با سرویس Api تحت معماری Restful لینک اول لینک دوم لینک سوم مثال اول یک نمونه‌ی بسیار ساده هستش. گزینه‌ی دوم یک کتابخانه‌ی ساده برای این کار تحت Php و گزینه‌ی سوم یک منبع ساده اما خوب برای ++C تحت کتابخانه‌ی Poco هستش. *ممکنه برای شروع کار دشوار باشه اما برای آشنایی با ساختار چنین سرویسی بد نیستند.
  9. 1 امتیاز
    مواردی که اشاره کردی بهشون درسته، بررسی کن ببین gradle نصب هست؟ قبل از کامپایل باید توسط وی-پی-ان موقع کامپایل یک بار دانلود بشه (خود کیوت این کار رو انجام میده). همچنین فایل‌های ساخته شده رو که در قالب کَش هستند پاک کن و از بخش Project از Shadow Build استفاده کن.
  10. 1 امتیاز
    معمولاً برای بازنشر مطالب، سوال و پرسش‌های خود در شبکه‌های اجتماعی یا گروه‌ها و کانال‌های پیام‌رسان نیاز است تا لینک آن را قرار دهیم.اما به صورت پیشفرض لینک مطالب کوتاه نیستند و برای حل این مشکل بهتر است از سیستم کوتاه کننده‌ی لینک استفاده شود که مثالی برای دریافت آن آمده است: فرض کنید سوالی پرسیده‌اید، برای دریافت لینک کوتاه و مفید آن بر روی دکمه‌ی بازنشر در بالای پُست کلیک کنید: برای دریافت لینک کوتاه و مناسب بر روی آن کلیک کرده و آدرس کوتاه شده را جهت بازنشر کپی کنید: * نکته، ممکن است شما نیاز داشته باشید تا آدرس پاسخ به سوالی را بازنشر کنید، در این صورت به پایینترین قسمت پاسخ خود رفته و بر روی گزینه‌ها کلیک کنید و سپس گزینه‌ی بازنشر را انتخاب و لینک مورد نظر خود را دریافت کنید.
  11. 1 امتیاز
    سلام، نسخه‌ی JDK، NDK و SDK شما چند هست؟
  12. 1 امتیاز
    در این پُست من به شما خواهم گفت که چگونه می‌توانید نسخه‌ی به‌روز Git را بر روی ابنتو ۱۸.۰۴ از روی سورس آن نصب کنید. قبل از اینکه آغاز کنیم، ما باید مطمئن باشیم که سیستم شما به طور کامل به‌روز می‌باشد. apt update && apt upgrade -y سیستم را راه‌اندازی مجدد و بسته های پیش نیاز را نصب کنید. apt install build-essential dh-autoreconf libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev سروس (منبع) Tarball را دانلود کنید. اول به این مخزن بروید بررسی کنید که آخرین نسخه‌ی آن کدام است. در این پست آخرین نسخه 2.17.1 است. از طریق دستور زیر نسخه‌ی مورد نظر را دانلود کنید: wget https://github.com/git/git/archive/v2.17.1.tar.gz پکیج Tarball را استخراج کنید: tar -xzvf v2.17.1.tar.gz دستور فوق دایرکتوری (مسیر) git-2.17.1/ را ایجاد خواهد کرد، برای تغییر مسیر به آن دستور زیر را اعمال کنید. cd git-2.17.1/ فایل پیکربندی را بسازید: make configure پیکربندی را اعمال و اجرا کنید: ./configure --prefix=/usr کد منبع را بیلد (بسازید): make all اگر شما می‌خواهید هر چیزی که در کد منبع وجود دارد را بسازید دستور زیر را اجرا کنید: make all doc info بعد از اتمام می‌توانید فایل‌های باینری را نصب کنید: make install اگر هم می‌خواهید هر چیزی را که بیلد شده است نصب کنید دستور زیر را اجرا کنید: make install install-doc install-html install-info بررسی کنید تا مطمئن شوید درست کار می‌کند: git --version git version 2.17.1 تبریک می‌گوییم، شما هم اکنون آخرین و بهترین نسخه‌ی Git را بر روی سیستم خود دارید! می‌توانید مسیر و فایل‌های نصبی را پاک کنید. حالا که آخرین نسخه‌ی گیت را بر روی سیستم خود دارید، از این پس برای به‌روز‌رسانی آن کافی است کد زیر را اجرا کنید: git clone git://git.kernel.org/pub/scm/git/git.git بررسی کنید که کدام نسخه‌ی منتشر شده را می‌خواهید داشته باشید: git checkout v1.whatever دوباره فرایند ساخت را تکرار کنید.
  13. 1 امتیاز
    انتشار نسخه‌ی بتا ۲ از کیوت کریتور ۴.۷ بخش C++ ویژگی‌ مهم این نسخه سازگاری و هماهنگی کامل برای پشتیبانی از کلنگ (Clang) در سی++ می‌باشد. قبل از هر چیز باید اشاره داشته باشیم به اینکه مدل کدینگ به صورت پیش فرض در کیوت کریتور ۴.۷ بر پایه Clang Model تعبیه شده است که به عنوان یک نکته عطف پس از سال‌ها تجربه و توسعه به دست آمده است. به روز رسانی های دیگری در بخش بک اند صورت گرفته است که مرتبط با Clang 6.0 می‌باشد که بهبود‌های بسیاری را به ارمغان می‌آورد. بخش QML مدل کد در QML در حال حاضر شامل حداقل پشتیبانی های مرتبط با شمارنده های تعریف شده از طرف کاربر می باشد که یکی از ویژگیهای جدید در کیوت ۵.۱۰ به بعد بود.علاوه بر این برخی از اشتباهات موجود در این بخش نیز اصلاح شده اند. ویژگی یکپارچه سازی شده برای آزمایش کد در صورتی که نمایشگر ماوس در ویرایستار سی++ در داخل یک تابع آزمایشی قرار گیرد، شما می‌توانید به صورت جداگانه آن را مورد آزمایش قرار دهید که با راست کلیک بر روی منوی محتوا تابع گزینه‌ی (Run Test Under Cursor) قابل انتخاب و آزمایش خواهد بود. دیگر بهبود‌ها گزینه های کیت در بالاترین بخش از تنظیمات خود قرار گرفته اند، بنابراین اولین کیت در اولین ردیف از لیست قرار گرفته است. در بخش نمایه از فایلها شما میتوانید پوشه ای بسازید. به صورت پیشفرض از این پس می توانید پوشه ها را قبل از فایل ها نمایش دهید، اما شما می‌توانید با انتخاب گزینه ای در منو نمایش‌های قبلی را رد کنید و یا از روش مرتب سازی بر اساس حروف الفبا استفاده کنید. تغییرات دیگر در این بخش آمده اند.
  14. 1 امتیاز
    نسخه‌ی نهایی کیوت کریتور ۴.۷.۰ منتشر شد. بهبود‌های مرتبط با سی‌پلاس‌پلاس از ویژگی‌های این نسخه می‌توان به فعال سازی مُدل کلنگ به صورت پیش‌فرض اشاره کرد. این ویژگی فرایند توسعه‌ی بسیار بزرگی را در این نسخه های اخیر رقم زده است. مدل کد کلنگ می‌تواند اطلاعات خوبی را مربوط به خطا‌های شما را نمایش دهد. ویژگی یکپارچه سازی آزمایش (Test Integration) اگر مکان نمای ماوس را در ویرایشگر سی‌پلاس‌پلاس در درون تابع آزمایش قرار دید، به طور مستقیم می‌توانید یک آزمایش جدید از آن را با اجرای گزینه Test Under Cursor action را ایجاد کنید. همچنین ویژگی های بیشتری توسط Google Test برای پشتیبانی از فیلترینگ های بیتر اضافه ده است. میزبانی ویندوز در ویندوز بررسی کامپایلر های MSVC بهبود یافته است، مشکلاتی در این زمینه حل شده اند. دیگر بهبود‌ها گزینه‌ی کیت (Kit) یکی از مهم‌ترین تنظیمات در کیوت کریتور می‌باشد. بنابراین در این نسخه جایگاه آن در بالاترین بخش از تنظیمات قرار گرفته شده است که در پست قبلی نیز به آن اشاره شده است. اگر شما صفحه‌های نمایش با کیفیت بالا HiDPI در ویندوز یا لینوکس دارید، حال شما می‌توانید به راحتی نحوه‌ی مقیاس پذیری آن را انتخاب کنید. بخش نمایش سیستم فایلها تغییراتی پیدا کرده‌اند که اجازه می‌دهد فایلها و پوشه‌ها را با یکپارچگی بهتری ببینید. همچنین شما می‌توانید پوشه‌های جدیدی را به صورت مستقیم در بخش فایل سیستم ایجاد کنید. دیگر بهبود‌ها و جزئیات در زیر لیست شده اند: Qt Creator version 4.7 contains bug fixes and new features. The most important changes are listed in this document. For a complete list of changes, see the Git log for the Qt Creator sources that you can check out from the public Git repository. For example: git clone git://code.qt.io/qt-creator/qt-creator.git git log --cherry-pick --pretty=oneline origin/4.6..v4.7.0 General * Added option for enabling and disabling HiDPI scaling on Windows and Linux (QTCREATORBUG-20232) * Added `Properties` item to context menu on files (QTCREATORBUG-19588) * Added `New Search` button to search results pane (QTCREATORBUG-17870) * Added option to show only icons in mode selector (QTCREATORBUG-18845) * File System View * Added `New Folder` (QTCREATORBUG-17358) * Added `Collapse All` (QTCREATORBUG-19212) * Added option to show folders on top (QTCREATORBUG-7818) * Made synchronization of root directory with current document optional (QTCREATORBUG-19322) * Fixed that external tools did not expand variables for environment changes Editing * Made replacement with regular expression search more perl-like (`$<number>` and `$&` are supported, whereas `&` is no longer used for captures) (QTCREATORBUG-9602, QTCREATORBUG-15175) * Added `Context Help` to editor context menu (QTCREATORBUG-55) * Added previous and next buttons to bookmarks view, and polished their behavior (QTCREATORBUG-9859, QTCREATORBUG-20061) * Added support for `WordDetect` in Kate highlighting files * Fixed that extra editor windows were not restored when opening session (QTCREATORBUG-13840) * Fixed that editor could stay busy repainting annotations (QTCREATORBUG-20422) * FakeVim * Added `:<range>sor[t][!]` Help * Improved performance impact on start up All Projects * Moved kit settings to separate options category * Made it easier to abort builds by changing build button to stop button while building (QTCREATORBUG-20155) * Added project type specific warnings and errors for kits, and made them visible in `Projects` mode * Added shortcut for showing current document in project tree (QTCREATORBUG-19625) * Added global option for `Add linker library search paths to run environment` (QTCREATORBUG-20240) * Added `%{CurrentBuild:Env}` Qt Creator variable QMake Projects * Added support for `-isystem` in `QMAKE_CXXFLAGS` * Added deployment rules for devices to widget and console application wizards (QTCREATORBUG-20358) * Fixed that arguments for QMake step did not expand variables * Fixed `lupdate` and `lrelease` external tools for Qt 5.9 and later (QTCREATORBUG-19892) C++ Support * Improved resize behavior of editor tool bar (QTCREATORBUG-15218, QTCREATORBUG-19386) * Fixed auto-insertion of closing brace and semicolon after classes (QTCREATORBUG-19726) * Fixed location information of macros (QTCREATORBUG-19905) * Clang Code Model * Enabled by default * Switched to Clang 6.0 * Implemented outline pane, outline dropdown and `C++ Symbols in Current Document` locator filter * Implemented `Follow Symbol` for single translation unit * Added type highlighting for Objective-C/C++ * Added errors and warnings of current editor to Issues pane (category `Clang Code Model`) * Added highlighting style for overloaded operators (QTCREATORBUG-19659) * Added option to use `.clang-tidy` configuration file or checks string * Added default configurations for Clang-Tidy and Clazy checks * Added link to the documentation in tooltip for Clang-Tidy and Clazy diagnostics * Improved reparse performance and memory usage * Improved selecting and deselecting specific Clang-Tidy checks * Fixed slow completion in case Clang-Tidy or Clazy checks were enabled * Fixed crashes when closing documents fast * Built-in Code Model * Added support for nested namespaces (QTCREATORBUG-16774) QML Support * Updated parser to Qt 5.10, adding support for user-defined enums * Fixed that linter warning `M127` was shown as error (QTCREATORBUG-19534) * Fixed that reformatting incorrectly removed quotes (QTCREATORBUG-17455) * Fixed that `.pragma` and `.import` were removed when reformatting (QTCREATORBUG-13038) * Fixed that import completion did not offer `QtWebEngine` (QTCREATORBUG-20723) Python Support * Added stack traces in application output to Issues pane (category `Python`) Debugging * Added `Leave Debug Mode` button to toolbar * Fixed updating of memory view * Fixed issue with restoring debugger views (QTCREATORBUG-20721) * QML * Added support for nested properties (QTBUG-68474) * Fixed issue with different endianness (QTBUG-68721) * Fixed Qt namespace detection with GDB 8 (QTCREATORBUG-19620) Qt Quick Designer * Fixed crash when adding quotes to text (QTCREATORBUG-20684) * Fixed that meta data could move in source code even when no changes occurred (QTCREATORBUG-20686) Clang Static Analyzer * Renamed plugin to `ClangTools` * Replaced Clang static analyzer by tool that runs Clang-Tidy and Clazy over whole project or a subset of the project's files QML Profiler * Improved performance of timeline * Added zooming into flame graph items Version Control Systems * Git * Added `-git-show <ref>` command line parameter * Gerrit * Added warning when pushing to wrong branch (QTCREATORBUG-20062) * Fixed updating after settings change (QTCREATORBUG-20536) Image Viewer * Added option to export SVGs in multiple resolutions simultaneously Test Integration * Added `Run Test Under Cursor` to C++ editor * Added editor marks for failed test locations (QTCREATORBUG-20328) * Google Test * Added support for filters * Fixed issue with jumping to file and line of failing test (QTCREATORBUG-18725) * Qt Quick * Fixed parsing issue with non-ASCII characters (QTCREATORBUG-20105) * Fixed detection of test name (QTCREATORBUG-20642) * Fixed detection when `quick_test_main()` is used directly (QTCREATORBUG-20746) Welcome * Rather than open project do nothing when right-clicking recent projects * Open session mini menu when right-clicking sessions Platform Specific Windows * Improved parsing of MSVC error messages (QTCREATORBUG-20297) * Fixed that querying MSVC tool chains at startup could block Qt Creator * Fixed issue with writing to network drives (QTCREATORBUG-20560) * Fixed issue with Clang and Qt 5.8 and later (QTCREATORBUG-20021) * Fixed handling of Windows debug stream which could lead to freezes (QTCREATORBUG-20640) Android * Improved behavior when emulator cannot be started (QTCREATORBUG-20160) * Fixed QML debugger connection issue from macOS client (QTCREATORBUG-20730)
  15. 1 امتیاز
    ساده ترین تعریفی که میشه گفت: اینترنت اشیاء (Internet of Things) به طیف گسترده‌ای از وسایلی که در اطرافمون وجود دارن و این قابلیت رو دارن که به شبکه اینترنت متصل بشن و توسط اپلیکیشن‌های موجود در تلفن‌های هوشمند و تبلت‌ها کنترل و مدیریت بشن، اینترنت اشیا گفته می‌شه! اما اینترنت اشیاء فقط به این موارد ختم نمی‌شه. فواید IoT اون‌قدر زیاده که حتی می‌تونه به روند نزولی مرگ و میرها منجر بشه! بریم تا چند مثال کوچیک از این فناوری بزرگ داشته باشیم. یک یخچال هوشمند در نظر بگیرید. این یخچال با توجه به سنسورها و پردازنده‌هایی که درونش نصب هست می‌تونه یک سری هشدار‌هایی رو منتقل کنه! مثلا میتونه در زمانی که دربش بازه، فیلتر آبش نیاز به تعویض داره، ماده غذایی داخل یخچال کمه و یا حتی زمانی که یک ماده غذیی چرب و خطرناکی خریداری بشه هشدار بده! اما این یخچال هنوز به دنیای شبکه متصل نیست حالا یک یخچال IoT در نظر بگیرین. این یخچال با توجه به این که به دنیای شبکه متصل می‌تونه برای قیمت غذا های پایین جستجو کنه، اگه فیلتر آبش نیاز به تعویض داشت سفارش بده و یا مواد غذایی که در روز‌ها یا هفته‌های آینده مورد نیازه رو پیش‌بینی کنه، سفارش بده و داخل سایت‌های مختلف برای قیمت‌ها به جستجو بپردازه. مثالی از یک خودرو IoT: می‌تونیم این خودرو رو از راه دور راه اندازی و به اون مکانی که حضور داریم کنترل و هدایت کنیم! یا اگر تصادفی صورت گرفت خود خودرو به پلیس زنگ بزنه! کاربرد اینترنت اشیا اون‌قدر زیاد هست که در روند بهبود بازده تولید کارخونه‌ها، مانیتور و کنترل کردن سلامت افراد یک جامعه کمک کنه. اما این نکته رو هم باید در نظر گرفت که در اینترنت اشیا هم محدودیت‌هایی وجود داره. و اما ساختار کلی اینترنت اشیاء چگونه است؟ تجهیزات: شامل قطعات سخت افزاری (سنسور ها و عملگرها) شبکه: شبکه‌ها و یا کانال های ارتباطی شامل : شبکه‌های سلولی، شبکه‌های بی سیم ابر: ذخیره سازی دادها و امینت اطلاعات برنامه‌های کاربردی: سیستم‌های تحلیلی، تراکنشی روند کلی تبادل اطلاعات در اینترنت اشیا به این صورت هست: مرحله اول تجهیزات و سنسور‌ها: به این صورت که سنسور‌ها میان داده‌ها و اطلاعات از اشیا مورد نظر اندازه‌گیری می‌کنن و بعد اون‌ها رو به مرحله بعد برای پردازش منتقل می‌کنن. توی پردازش محلی یک سری برد وجود داره که یک سلسه مراحلی جهت پردازش بر روی اطلاعات اولیه که سنسورها دریافت کردن رو انجام می‌دن و نتایج ذخیره می‌کنن. مرحله بعد شبکه (Network) : اطلاعات پردازش شده توسط شبکه‌ها موجود به اینترنت فرستاده می‌شه و در مرحله بعد این اطلاعات به فضای ابری (cloud) منتقل می‌شن و روی اون‌ها پردازش‌هایی صورت می‌گیره و برای مدت طولانی این اطلاعات ذخیره سازی می‌شن. در ادامه و تکمیل این موضوع به مزایا و معایب هر کدوم از این پروتکل‌های زیر و همین‌طور معرفی برد آردوینو و رسبری پای و معایب و مزایای هر کدوم، و همین‌طور پر استفاده‌ترین زبان‌های برنامه نویسی در صنعت (IoT) می‌پردازیم. شبکه و اینترنت (IoT Gateway) پرتکل های مهم در اینترنت اشیا؟! COAP☆ MQTT☆ HTTP☆ XMPP☆ امیدوارم مفید بوده باشه
  16. 1 امتیاز
    جزئیات در ++C ویرایش ۱۷: کد نویسی ساده با توجه به مشخصاتی که در سی‌پلاس‌پلاس ۱۷ که ارائه شده است، ویژگی‌های جدید برای این معرفی می‌شوند تا کد شما تمیز تر و بهتر اعمال شوند. این مقاله را برای مطلع شدن از جزئیات بیشتر بخوانید. با هر استاندارد سی‌‌‌پلاس‌‌پلاس که ارائه می‌شود، هدف از آن تولید کد ساده تر، واضح تر و رسا تر می‌باشد. سی‌پلاس‌پلاس ۱۷ چندین ویژگی بزرگ زبان را ارائه می‌دهد که باعث می‌شود کد ما زیباتر و بهتر شود. بنابراین بیایید باهم یک نگاهی به این ویژگی‌ها داشته باشیم. ممکن است شما بگویید که بیشترین ویژگی‌های جدید زبان (به جز پیشرفت های کتابخانه استاندارد - STL) برای نوشتن کد ساده تر و پاکتر می‌باشند. با توجه به مجموعه جزئیات سی‌پلاس‌پلاس ۱۷ که بسیاری از چیزهای بزرگ را مورد بررسی قرار داده است، ما امروز تنها برای بعضی از ویژگی ها که از داخل این مجموعه عظیم بیرون کشیده‌ایم اشاره خواهیم داشت که باعث می‌شود کد شما فشرده‌تر و بهینه تر شود. پیوند‌های ساخت یافته / اعلان‌های تجزیه عبارت Init-statement برای if/switch متغیرهای درون خطی (inline) شرط constexpr if و چند موارد دیگر پیوند‌های ساخت یافته، آیا اغلب با tuple ها کار کرده‌اید؟ اگر نه، پس احتمالاً باید به آن نگاهی کنید. tuple ها تنها برای بازگشت مقادیر چند گانه از یک تابع پیشنهاد نمی‌شوند، آنها پشتیبانی ویژگی‌ای از زبان را داشتند. به طوری که باعث می‌شود کد ساده تر و پاکتر شود. برای مثال (std::tie که از مرجع اصلی سی‌پلاس‌پلاس به دست آمده است) به صورت زیر است: std::set<S> mySet; S value{42, "Test", 3.14}; std::set<S>::iterator iter; bool inserted; // unpacks the return val of insert into iter and inserted std::tie(iter, inserted) = mySet.insert(value); if (inserted) std::cout << "Value was inserted\n"; توجه داشته باشید که باید iter و inserted را ابتدا وارد کرده باشید. سپس شما می‌‌توانید از std::tie استفاده کنید. با این حال این بخش کوچکی از کد نمونه است: std::set<S> mySet; S value{42, "Test", 3.14}; auto [iter, inserted] = mySet.insert(value); اینجا توجه داشته باشید که یک خط به جای سه خط جایگزین شده است! این کد ساده‌تر و خوانا‌تر و درعین حال ایمن‌ تر است، اینطور نیست؟ همچنین، شما هم اکنون می‌‌توانید از const استفاده کنید و آن را به صورت const auto [iter inserted] بنویسید که صحیح است. پیوند ساختاری تنها به tuple ها ختم نمی‌شود، چرا که ما سه مورد دیگر را داریم: اگر مقدار دهی اولیه یک آرایه باشد: // works with arrays: double myArray[3] = { 1.0, 2.0, 3.0 }; auto [a, b, c] = myArray; اگر مقدار دهی اولیه std::tuple_size<> را پشتیبانی کند و تابع get را فراهم کند که شایع ترین مورد است. auto [a, b] = myPair; // binds myPair.first/second به عبارت دیگر، شما می‌‌توانید کلاس‌های خود را پشتیبانی کنید، با فرض این که شما تابع get را در پیاده سازی رابط کلاس خود اضافه کرده باشید. اگر مقدار دهی اولیه فقط شامل اعضای عمومی شود در این صورت: struct S { int x1 : 2; volatile double y1; }; S f(); const auto [ x, y ] = f(); در حال حاضر این روش برای دریافت یک مرجع از یک عضو tuple آسان است. auto& [ refA, refB, refC, refD ] = myTuple; و یکی از جالب‌ترین استفاده‌‌ها (پشتیبانی از حلقه‌ها است): std::map myMap; for (const auto & [k,v] : myMap) { // k - key // v - value } پیوند ساختاری یا تقسیم بندی اعلان‌ها برای این ویژگی، ممکن است شما نام های دیگری را دیده باشید، "اعلان تجزیه". همانطور که می‌‌بینیم، این دو نام در نظر گرفته شده است، اما فعلاً استاندارد سازی در حالت پیش‌نویسه است و با نام "پیوند‌های ساختاری" می‌‌باشند. جزئیات بیشتر در رابطه با این مورد در اسناد P0217R3، P0144R0 و P0615R0 موجود هستند. همچنین این مورد با کامپایلر‌‌های GCC 7.0،MSVC2017 و Clang 4.0 سازگار است. عبارت Init-statement برای if/switch نسخه جدید عبارت شرطی if و switch در سی‌پلاس‌پلاس جدید به صورت زیر است: if (init; condition) , switch (init; condition) قبلاً باید به صورت زیر می‌نوشتیم: { auto val = GetValue(); if (condition(val)) // on success else // on false... } در اینجا val یک دامنه جدا کننده بدون دارد که باعث "نشت - فقدان" در خاتمه دهنده دامنه خواهد شد. در حالی که شما در نسخه جدید می‌‌‌توانید به صورت زیر بنویسید: if (auto val = GetValue(); condition(val)) // on success else // on false... متغیر val تنها در داخل عبارات if و else قابل رویت است، بنابراین آن یک "نَشت" نخواهد داشت. condition ممکن است چندین عبارت باشد نه تنها if بنابراین متغیر val یکی از دو مقدار true/false را خواهد داشت. چرا این ویژگی کاربرد دارد؟ اجازه دهید تا به شما بگوییم زمانی که می‌خواهید چندین چیز را در یک رشته را جستجو کنید به صورت زیر خواهید داشت: const std::string myString = "My Hello World Wow"; const auto it = myString.find("Hello"); if (it != std::string::npos) std::cout << it << " Hello\n" const auto it2 = myString.find("World"); if (it2 != std::string::npos) std::cout << it2 << " World\n" ما باید از نام‌‌های مختلفی برای it استفاده کنیم و یا اینکه آن را با دامنه خاتمه دهنده جدا سازیم. { const auto it = myString.find("Hello"); if (it != std::string::npos) std::cout << it << " Hello\n" } { const auto it = myString.find("World"); if (it != std::string::npos) std::cout << it << " World\n" } عبارت جدید شرطی if در نسخه جدید یک دامنه اضافه را در یک خط ایجاد می‌‌کند. if (const auto it = myString.find("Hello"); it != std::string::npos) std::cout << it << " Hello\n"; if (const auto it = myString.find("World"); it != std::string::npos) std::cout << it << " World\n"; همانطور که قبلاً اشاره شده است، متغیر تعریف شده در عبارت شرطی if در بلوک دیگری قابل مشاهده است. بنابراین شما می‌‌تواین به صورت زیر بنویسید: if (const auto it = myString.find("World"); it != std::string::npos) std::cout << it << " World\n"; else std::cout << it << " not found!!\n"; به علاوه، شما می‌‌توانید آن را با پیوند ساختاری بر اساس کد نمونه از جانب (Herb Sutter) استفاده کنید: // better together: structured bindings + if initializer if (auto [iter, succeeded] = mymap.insert(value); succeeded) { use(iter); // ok // ... } // iter and succeeded are destroyed here جزئیات بیشتر در اسناد زیر آمده است: سند P0305R1 ویدیو موجود در یوتیوب با عنوان (C++ Weekly - Ep 21 C++17’s if and switch Init Statements) این مورد با کامپایلر‌های GCC 7.0،MSVC-2017.3 و Clang 3.9 سازگار است. متغیرهای درون خطی (inline) با شروع مقدار دهی داده‌های غیر استاتیک، اکنون می‌‌توانیم یک متغیر عضو را دی یک مکان اعلام کنیم. با این حال، با متغیر‌های استاتیک یا const static، معمولاً باید آن را در برخی از فایل‌های cpp تعریف کنید. در سی‌پلاس‌پلاس ۱۱ و کلید واژه constexpr که مارا قادر می‌سازد تا در یک مکان اعلان و تعریف متغیر‌های استاتیک را انجام دهیم، اما این امکان تنها به constexpr محدود می‌‌شود. قبلاً فقط روشها/توابع می‌‌توانستند به عنوان inline تعریف شوند، حالا شما می‌‌توانید این کار را با متغیر ها در داخل فایل هدر انجام دهید. یک متغیر اعلام شده درون خطی معنای مشاهبی دارد بنابراین همانند یک تابع inline تعریف می‌‌شود. آن را می‌‌توان به واحد‌های ترجمه چند گانه نیز تعریف کرد. مثال‌‌های زیر را ببینید: struct MyClass { static const int sValue; }; inline int const MyClass::sValue = 777; و حتی struct MyClass { inline static const int sValue = 777; }; همچنین توجه داشته باشید که متغیر‌های constexpr به طور ضمنی inline هستند، بنابراین نیازی به استفاده به صورت constepr inline myVar = 10; نمی‌‌باشد. این ویژگی چرا کد را ساده تر می‌‌کند؟ برای مثال، تعداد زیادی از هدرها در کتابخانه تنها تعدادی از روش های (هک‌) را محدود می‌‌کنند (مانند استفاده توابع درون خطیinline و یا قالب ها) و در نهایت مزیت constexpr این است که مقدار دهی اولیه شما نباید constexpr باشد. جزئیات بیشتر در رابطه با این ویژگی در سند زیر موجود است: سند P0386R2 این مورد با کامپایلر‌های GCC 7.0 و Clang 3.9 سازگار است اما فعلاً با MSVC سازگاری ندارد. ویژگی مربوط به constexpr if ممکن است در بعضی جاها به قابلیت std::enable_if در سی‌پلاس‌پلاس ۱۴ نگاه کنید که آن به راحتی با constexpr if جایگزین می‌شود. بنابراین، در اکثر موارد، ما اکنون می‌‌توانیم تنها با نوشتن عبارت یک constexpr if این کار را بهتر و تمیز تر انجام دهیم. این ویژگی برای برنامه نویسی metaprogramming/template بسیار مهم است که احتمالاً طبیعت آن بسیار پیچیده خواهد بود. یک مثال ساده با تابع Fibonacci: template<int N> constexpr int fibonacci() { return fibonacci<N-1>() + fibonacci<N-2>(); } template<> constexpr int fibonacci<1>() { return 1; } template<> constexpr int fibonacci<0>() { return 0; } حال می‌‌توان آن را تقریباً در یک حالت نرمال (نسخه بدون کامپایل) نوشت: template<int N> constexpr int fibonacci() { if constexpr (N>=2) return fibonacci<N-1>() + fibonacci<N-2>(); else return N; } در رویداد ۱۸ هم جلسات هفتگی سی‌پلاس‌پلاس در جیسون ترنر نمونه‌‌ای را می‌‌توان یافت که در آن عبارت constexpr if هیچ منطق اتصال کوتاهی را در زمان کامپایل انجام نمی‌‌‌دهد، بنابراین این کد باید کامپایل شود: if constexpr (std::is_integral<T>::value && std::numeric_limits<T>::min() < 10) { } در کد فوق برای T شما در std::strin‌g خطایی کامپایل را دریافت خواهید کرد زیرا numeric_limits برای رشته ها تعریف نشده اند. در جلسات C++NOW 2017 آقای Bryce Leblbach با عنوان جلسه خود C++17 Features در ۱۶ دقیقه مثال بسیار زیبایی را در رابطه باconstexpr if زد که می‌‌تواند برای تابع get استفاده شود که آن برای پیوند ساختاری مورد استفاده قرار می‌‌گیرد. struct S { int n; std::string s; float d; }; template <std::size_t I> auto& get(S& s) { if constexpr (I == 0) return s.n; else if constexpr (I == 1) return s.s; else if constexpr (I == 2) return s.d; } قبلاً ما باید به صورت زیر می‌‌نوشتیم: template <> auto& get<0>(S &s) { return s.n; } template <> auto& get<1>(S &s) { return s.s; } template <> auto& get<2>(S &s) { return s.d; } همانطور که می‌‌بینید، مشکل سوال برانگیز اینجاست که کد در این جا ساده تر است. اگر چه در این مورد فقط از یک ساختار ساده استفاده شده است، با برخی از نمونه های واقعی دنیا، کد نهایی باید بسیار پیچیده تر از این باشد بنابراین باید constexpr if کد تمیز تری نسبت به این مورد باشد. این مورد با کامپایلر‌های GCC 7.0،MSVC-2017.3 و Clang 3.9 سازگار است. ویژگی‌های دیگر ما می‌‌توانیم در رابطه با بسیاری از ویژگی های جدید سی‌پلاس‌پلاس صحبت کنیم اما در این پست ما بیشتر در رابطه با قطعات بزرگتر تمرکز کرده‌‌ایم. با این حال، فقط برای یادآوری، ممکن است بخواهید ویژگی‌‌های زیر را در نظر بگیرید که آنها نیز کد ها را ساده تر می‌کنند: قالب‌ (template) عبارت Fold الگو برای کلاس ها بنابراین برای ذکر ویژگی‌‌های بیشتر در رابطه با نسخه جدید در پستهای آن ها را پوشش خواهیم داد. شک نکنید که، سی‌پلاس‌پلاس ۱۷ پیشرفت واقعی را در برابر کد های جمع و جور و آسان فراهم گرده است. یکی از بهترین چیزها constexpr است که آن به ما اجازه می‌دهد کد template/metaprogramming را به روش کد استاندارد شده بنویسیم. این یک مزیت بسیار بزرگی است. ویژگی دوم: پیوند ساخت یافته (که حتی برای حلقه ها کار می‌‌کند) مانند حسی را القا می‌‌کند که در زبان‌های پویایی مثل Python وجود دارد. همانطور که می‌‌بینید، تمام ویژگی‌های ذکر شده در حال حاضر در Clang، MSVC و GCC قابل اجرا هستند. اگر شما با نسخه های اخیر این کامپایلر ها کار می‌کنید می‌تواین بلافاصله با سی‌++ ۱۷ کار کرده و آن را تجربه کنید.
  17. 1 امتیاز
    مقدمه گاهی اوقات ارزش این را دارد که چند قدم به عقب برداریم و از دید یک تازه‌کار دنیای توسعه را نگاهی بی‌اندازیم. امروزه که استقبال زیادی از فریم‌ورک (framework) انگولار می‌شود، پرسش‌های زیادی در مورد انگولار در ذهن‌ توسعه دهنده‌ها به وجود آمده پرسش‌هایی مانند: انگولار چیست؟ چرا باید انگولار را استفاده کنیم؟ چه موقع نباید از انگولار استفاده کنیم؟ در این مقاله من پاسخ این پرسش‌ها و مطالب بیشتری را می‌دهم. نگاهی خواهیم انداخت به این که انگولار چیست، چگونه راه‌اندازی شد و چه زمانی استفاده از انگولار ایده‌ی خوبی است. بگذارید از ابتدا شروع کنیم و ببینیم چگونه فریم‌ورک انگولار راه اندازی شد؟ انگولار چگونه راه‌اندازی شد؟ انگولار به عنوان یک پروژه‌ی جانبی شروع شد. در سال 2009، میسکو هِوِری (Miško Hevery) و آدام ابرونز (Adam Abrons) پروژه‌ای را تحت عنوان <angular/> منتشر کردند که به توسعه دهنده‌ها‌ و طراحان کمک می‌کرد تا با استفاده از تگ (tag) های ساده HTML وب اپلیکیشن‌هایی (Web application) بسازند. نام "Angular" از براکت های زاویه‌دار یا <> می‌آید، که تمام تگ‌های HTML را احاطه می‌کنند. میسکو ایده‌ی پشت این فریم‌ورک را در مصاحبه‌ای که در سال 2013 انجام شد شرح داد: چون دامین angular.com گرفته شده بود - که هنوز هم گرفته شده - حامی‌ها نام کتابخانه را به GetAngular تغییر دادند و سایت کوچکی را قرار دادند که درباره‌ی امکانات فریم‌ورک صحبت می‌کرد. تصویر زیر وبسایت انگولار در سال 2009 را نشان می‌دهد: پس از مدت کوتایی میسکو شروع به کار برای گوگل کرد، و در 2010 در حال کار کردن روی پروژه ای به نام google feedback بود. میسکو برد گرین (Brad Green) مدیر خود را قانع کرد تا پروژه را با استفاده از پروژه جانبی انگولار او باز نویسی کند و مقدار زمان و کدی که تیم توانست ذخیره کند کمک کرد تا گوگل را برای قدرتی که انگولار ارائه می‌داد متقاعد کند. کمی بعد از موفقیت در بازنویسی Google Feedback، همان تیم کتابخانه را متن‌باز کردند و سرانجام نسخه 1.0 از انگولار در ماه می سال 2011 منتشر شد. طی چند سال آمار استفاده از انگولار صعود کرد، و امروز گوگل استفاده‌ی نیم میلیون توسعه دهنده از انگولار را به رخ می‌کشد. انگولار چه میکند؟ انگولار یک فریم‌ورک جاوا اسکریپت است که به توسعه دهنده‌ها در ساختن برنامه کمک می‌کند. این کتابخانه تعدادی امکانات را ارائه می‌کند که پیاده سازی نیازمندی‌های پیچیده‌ی برنامه‌های مدرن را بدیهی و آسان می‌کند. مانند پیوند داده (data binding)، مسیریابی (routing) و انیمیشن‌ها (animations). همچنین انگولار قرارداد‌هایی را برای چگونگی توسعه برنامه (application) فراهم می‌کند، که می‌تواند برای تیم‌های بزرگی که نیاز دارند با هم روی یک کد پایه کار کنند بسیار مفید باشد. انگولار تنها کتابخانه جاوا اسکریپت است که راهنمای استایل (style) جامع را با تعدادی دستورالعمل محتاطانه درباره چگونگی نوشتن کد با فریم‌ورک ارائه می‌دهد. چه زمانی باید انگولار را استفاده کرد؟ از دید تکنیکی شما می‌توانید هر چیزی با انگولار بسازید، اما انگولار در پروژه های پیچیده که شامل داده می‌شوند به بهترین شکل عمل می‌کند. اگر شما نگاهی به برنامه‌های متنوع ساخته شده توسط انگولار که در اینجا لیست شده بی‌اندازید، خواهید دید عموما برنامه‌هایی هستند که داده‌ها را از فرم (form) ها جمع‌آوری کرده و با آن کاری می‌کنند. این به این معنی نیست که شما باید برای استفاده از انگولار در پروژه‌ی خود فرم داشته باشید. توسعه دهنده‌ها تعداد تعجب برانگیزی از بازی‌ با انگولار به خوبی چیزهایی مثل برنامه‌های واقعیت مجازی ساخته‌اند! با این حال اکثر آموزش‌هایی که خواهید یافت درباره‌ی برنامه‌هایی از نوع فرم‌دار خواهد بود. برای مثال مستندات انگولار آموزشی درباره‌ی ساخت برنامه‌ای است که شما با استفاده از فرم، قهرمان هایی را می‌سازید و آنها را در لیستی مشاهده می‌کنید. انگولار در برنامه‌های با پایه فرم خوب عمل میکند، همچنین برای برنامه‌های بزرگ و پیچیده بسیار مناسب است. همچنین انگولار نه آسان‌ترین فریم‌ورک جاوا اسکریپ است و نه کوچک‌ترین؛ بنابراین اگر در حال ساخت چیز کوچکی هستید کتابخانه‌های ساده‌تری مثل جی‌کوئری خواهید یافت که مناسب‌تر هستند. مشابهاً انگولار بسیار مناسب برنامه‌هایی است که توسط تیم‌های متوسط الی بزرگ ساخته شده‌اند. اگر شما خودتان در حال کار بر روی برنامه‌ای هستید، ممکن است قرارداد های انگولار را بیشتر از نیاز خود ببینید. انگولار همچنین برای برنامه‌هایی مناسب است که نیاز دارند در محیط‌های توسعه مختلفی اجرا شوند. اگر شما برنامه‌ای دارید که باید به خوبی یک برنامه‌ی ویندوزی یا مک اجرا شود، می‌توانید یکی از آموزش‌های آنلاین برای اجرای برنامه‌ی انگولار خود با پروژه معروف الکترون را دنبال کنید. اگر شما برنامه‌ای دارید که باید به خوبی برنامه اندروید و ios اجرا شود، می‌توانید با استفاده از NativeScript برنامه‌ی خود را در یک محیط بومی واقعی موبایل رندر (Render) کنید. در بعضی موارد حتی می‌توانید این کد را بین پلتفرم‌های مختلف به اشتراک بگذارید. چه کسی پشتیبان انگولار است؟ تیم هسته‌ی انگولار آرایه‌ای عظیم از افراد و جامعه‌ی (community) انگولار را شامل می‌شود که در دنیا گسترده‌ شده‌اند. که می‌شود گفت بیشتر توسعه‌های روز به روز انگولار توسط کارمندان گوگل انجام شده است. صفحه درباره‌ی انگولار تقریباً 20 کارمند گوگل را در تیم هسته انگولار لیست کرده است و تمام برترین مشارکت کننده‌ها در پروژه انگولار در گوگل کار می‌کنند. که می‌شود گفت گوگل انگولار را کنترل می‌کند، خود کتاب‌خانه هنوز تا مقدار زیادی تلاش جامعه است. بیشتر از 2000 فرد در یکی از مخزن‌های (repositories) متن‌باز انگولار مشارکت داشته‌اند. راهنما و آموزش‌های بی‌شمار نوشته شده توسط جامعه در دسترس هستند، و شرکت‌های مختلفی به توسعه دهنده‌ها برای قدرت بیشتر پیشنهاد آموزش و تجهیز شدن به انگولار را می‌دهند. چه نسخه ای از انگولار را استفاده کنم؟ در زمان نوشتن این مقاله دو نسخه مشهور انگولار موجود هستند. نسخه یک در وب‌سایت https://angularjs.org در دسترس است و نسخه ی آپدیت شده‌ی همان کتاب‌خانه‌ای است که میسکو و تیم در سال 2011 منتشر کردند. نسخه ی مشهور دیگر انگولار اکنون به سادگی "Angular"خوانده می‌شود و در وب‌سایت https://angular.io در دسترس است. انگولار مدرن کاملا شکل دوباره طراحی شده‌ی نسخه یک برای مرورگرها، جریان‌های کار و پلتفرم‌های توسعه جدیدتر است.
  18. 1 امتیاز
    کتابخانه cURL یک پروژه نرم‌افزاری کامپیوتر است که یک کتابخانه و ابزار خط فرمان را برای انتقال داده ها با استفاده از پروتکل‌های مختلف را فراهم می‌کند. چیزی که موجب محبوبیت این کتابخانه شده است پشتیبانی از پروتکل‌های کثیری مانند DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMTP, SMTPS, Telnet و TFTP می‌باشد. همچنین cURL گواهی‌نامه های SSL را نیز پشتیبانی می‌کند. پروژه cURL با دو عنوان libcurl و cURL در سال ۱۹۹۷ توسط دانیل استنبرگ معرفی شد. به طور کلی libcurl یک کتابخانه انتقال داده سمت-کاربر است و cURL یک خط فرمان جهت دریافت و ارسال داده تحت آدرس url است. برای مثال کد زیر نمونه ای از نحوه عملکرد این کتابخانه جهت استفاده از متد Get برای کار با پروتکل HTTP می‌باشد: #include <stdio.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "http://example.com"); /* example.com is redirected, so we tell libcurl to follow redirection */ curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); /* Perform the request, res will get the return code */ res = curl_easy_perform(curl); /* Check for errors */ if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); /* always cleanup */ curl_easy_cleanup(curl); } return 0; }
  19. 1 امتیاز
    مقدمه در دنیای برنامه‌نویسی، نوع جوابی که برای سوالات فنی خود می‌گیرید، هر چقدر که به سختی جواب دادن سوال بستگی دارد، همانقدر هم به روش پرسیدن شما بستگی دارد. با مطالعه‌ی این راهنما قادر خواهید بود طوری سوال کنید که به احتمال بیشتری جواب رضایت بخشی دریافت کنید. هدف ما از این سند در مرجع برنامه نویسی ایران، این است که فرهنگ مکاتبه و رسیدگی به مشکلات همدیگر را در زمینه‌های مرتبط افزایش و بهینه سازی کنیم. بنابراین، امروزه که برنامه‌نویسی بیش از پیش گسترده شده، می‌توانید از وجود افراد با‌تجربه استفاده کنید و جواب‌های خوبی دریافت کنید. با این حال حتی اگر افراد با‌تجربه هم برای پرسیدن سوال روش‌های توصیه شده در این راهنما را به کار گیرند جواب‌های مفید‌تری دریافت می‌کنند. اولین چیزی که باید درک کنیم این است که افراد با‌تجربه سوال های سخت و طولانی را دوست دارند که به خوبی ذهن را درگیر می‌کند. اگر به ما یک سوال جالب توجه بدهید که به آن فکر کنیم از شما سپاس‌گزار خواهیم شد. سوالات خوب محرک ذهن بوده و یک هدیه هستند. سوالات خوب به ما کمک میکنند تا فهم خود را توسعه دهیم و عموماً باعث آشکار شدن مشکلاتی میشود که ممکن است ما ندانیم یا به آنها توجهی نکرده باشیم. در میان افراد با‌تجربه یک سوال خوب یک چالش مهیج است. با این وجود بسیاری از تازه‌کار ها گمان میکنند که افراد با‌تجربه در مقابل سوالات ساده با دشمنی و تکبر برخورد می‌کنند و به نظر می‌رسد که واکنش گستاخانه‌ای با افراد تازه‌کار و ناآگاه دارند. اما به هیچ وجه این‌طور نیست! چیزی که بدون شرمندگی باید بگوییم، خصومت با افرادی است که ظاهراً تمایلی به تفکر در موضوع ندارند و جواب دادن به سوالشان را به نوعی وظیفه‌ی افراد با تجربه می‌دانند. از دید افراد با‌تجربه چنین افرادی باعث هدر رفتن وقت می‌شوند پس وقت خود را صَرف جواب دادن به سوالات بهتر میکنند. همچین افراد با‌تجربه بسیار داوطلب هستند و در زمان‌هایی که مشغول نباشند به پاسخ دادن به سوالات می‌پردازند. در آن مواقع غرق سوالات هستند. پس بدون ترس سوالات را فیلتر می‌کنند و ترجیح می‌دهند که به سوالاتِ بهتر جواب دهند. نوع رفتار شما شایستگی شما را برای دریافت جواب نشان می‌دهد. افراد شایسته زیرک، اندیشمند، هشیار و علاقمند به شرکت فعالانه در توسعهٔ یک راه‌حل هستند. بهترین راه برای گرفتن یک جواب سریع و خوب اینست که آن را مانند یک شخص زرنگ و مطمئن بپرسید، شخصی که واقعاً نیاز به کمک در یک مشکل خاص دارد. قبل از این که سوال کنید قبل از پرسیدن یک سوال فنی از طریق ایمیل، شبکه اجتماعی یا انجمن یک وبسایت، این کار‌ها را انجام دهید: سعی کنید جواب خود را با جستجو در ویکی‌پدیا و یا در قسمت‌های ویکی سایت مربوطه پیدا کنید. سعی کنید جواب خود را با جستجو در آرشیو انجمنی که می‌خواهید بفرسیتد، پیدا کنید. سعی کنید جواب خود را با جستجو در وب پیدا کنید. سعی کنید جواب خود را با خواندن manual (راهنما) پیدا کنید. سعی کنید جواب خود را با خواندن FAQ (سوالات متداول) پیدا کنید. سعی کنید جواب خود را از طریق بازبینی یا آزمایش پیدا کنید. سعی کنید جواب خود را با پرسیدن از یک دوست باتجربه پیدا کنید. اگر یک برنامه‌نویس هستید، سعی کنید جواب خود را با خواندن کدمنبع پیدا کنید. از فنونی استفاده کنید. برای مثال متن پیغام ارور را در گوگل جستجو کنید. حتی اگر به نتیجه ای نرسید، گفتن اینکه «من عبارت زیر را گوگل کردم، اما چیز امیدوار کننده‌ای پیدا نکردم» چیز خوبی برای یک گروه پستی یا خبری است، حداقل به این دلیل که مشخص می‌شود جستجو کمکی نمی‌کند. وقت بگذارید. انتظار نداشته باشد که بتوانید مشکل پیچیدهٔ خود را با چند ثانیه گوگل کردن حل کنید. FAQ ها را بخوانید و بفهمید، آرام و باتمرکز بنشنید و کمی در مورد مشکل خود فکر و گمانه‌زنی کنید. به یکباره تمام سوالات خود را ارسال نکنید فقط به خاطر اینکه اولین جستجوی شما به هیچ جوابی نرسید (یا به جواب‌های زیادی رسید). سوال خود را آماده کنید. به آن فکر کنید. سوالات شتاب‌زده به جواب‌های شتاب‌زده منجر خواهد شد، یا اصلاً به هیچ جوابی نمی‌رسد. هر چه بیشتر این را نشان دهید که برای حل مسئلهٔ خود قبل از درخواست کمک، فکر و تلاش کرده‌اید، همانقدر احتمال بیشتری خواهد رفت که واقعاً به شما کمک کنند. از پرسیدن سوال اشتباه، اجتناب کنید. اگر سوالی بپرسید که بر اساس فرض‌های ناقص و اشتباه است، یک فرد با تجربه ممکن است با این تصور که «یک سوال احمقانه است...» بخواهد به شما یک جواب لفظی و بی‌فایده بدهد، و به امید اینکه شما درس بگیرید از تجربهٔ گرفتن آنچه پرسیدید، نه آنچه مورد نیاز شما بود. ما وقتی می‌توانید به جواب برسید که یک سوال قابل توجه و برانگیزندهٔ ذهن بپرسید، سوالی که بطور ضمنی باعث کمک به تجربهٔ جامعه می‌شود، نه آنکه فقط بصورت انفعالی خواستار دانش از دیگران باشید. از طرف دیگر، روشن ساختن اینکه شما توانایی و تمایل کمک در پروسهٔ حل مسئله را دارید، شروع بسیار خوبی است. «آیا کسی می‌خواهد منبعی معرفی کند؟»، «مثال من چه چیز کم دارد؟»، و «چه وبسایتی را بهتر است بررسی کنم» به احتمال بیشتری جواب خواهند گرفت نسبت به این سوال که «لطفاً روش دقیق کاری که باید انجام دهم را بنویسید.». چون [در حالت اول] شما این را روشن می‌سازید که واقعاً راغب به تکمیل پروسه [ی حل مشکل] هستید اگر شخصی فقط مسیر صحیح را به شما نشان دهد. وقتی سوال می‌کنید: انجمن خود را به دقت انتخاب کنید به این حساس باشید که کجا سوال خود را مطرح می‌کنید. شما احتمالاً نادیده گرفته خواهید شد اگر: سوال شما دارای عنوان مناسب نباشد. یک سوال بسیار ابتدایی را در انجمنی پست کنید که انتظار سوالات فنی پیشرفته را دارند. یا بالعکس. یک سوال مشترک را در چند گروه خبری پست کنید. یک ایمیل شخصی به کسی بفرستید که نه سابقه آشنایی با شما دارد، و نه شخصاً مسئول حل مشکل شماست. افراد با تجربه سوالاتی که بیجا در مکان خاصی پست شود را پاک می‌کنند تا کانالهای ارتباطی‌شان را از غرق شدن در بی‌ربطی حفظ کند. شما نمی‌خواهید این اتفاق برایتان بیفتد؛ بنابراین اولین قدم این است که انجمن درست را انتخاب کنید. باز هم، گوگل و سایر روشهای جستجوی وب، دوست شما هستند. از آنها استفاده کنید. رها کردن یک ایمیل به سوی شخص یا انجمنی که با آن آشنا نیستید، در بهترین حالت یک ریسک است. در مورد اینکه آیا سوال شما مورد استقبال واقع می‌شود یا نه، حدس‌های خوشبینانه نزنید. اگر مطمئن نیستید آن را جای دیگری بفرستید یا اینکه از فرستادن آن خودداری کنید. به یکباره سوال خود را به همه‌ی کانال های کمک‌رسانی ارسال نکنید، این کار مانند فریاد زدن است و افراد را عصبانی می‌کند. به آرامی از میان آنها گام بردارید. عموماً سوالاتی که در یک انجمن عمومی و درست (بجا) پرسیده شوند، احتمال اینکه جواب مفید بگیرند بیشتر است تا آنهایی که در جای خصوصی پرسیده می‌شوند. چندین دلیل برای این وجود دارد. یک دلیل ساده، مقدار منابع پاسخگو است. یکی دیگر تعداد بازدیدکنندگان است؛ افراد با‌تجربه ترجیح می‌دهند به سوالاتی جواب دهند که افراد بیشتری را آموزش دهد، تا سوالاتی که فقط به درد افراد کمی بخورد. به وضوح، برنامه‌نویسان چیره‌دست و سازندگان نرم‌افزارهای محبوب، همواره بسیار بیشتر از توان پاسخ‌گویی‌شان، پیغام‌های انبوه و بی‌هدف دریافت می‌کنند. شما با اضافه شدن به این سیل، یکی از آن موارد بسیار زیاد هستید. از عناوین پرمعنا و دارای موضوع مشخص، استفاده کنید در لیست‌های پستی، گروه‌های خبری یا انجمن‌های وب، عنوانِ موضوع، فرصت طلایی شماست تا با حدود ۵۰ کاراکتر یا کمتر، توجه متخصصانِ قابل را جلب کنید. با عناوینی مثل «لطفاً به من کمک کنید»، آن را هدر ندهید (پیغام‌هایی با این‌گونه عناوین به راحتی دور انداخته می‌شوند). سعی نکنید با عمق اضطراب خود، افراد با تجربه را تحت تأثیر قرار دهید؛ در عوض، از آن فضا برای یک توصیف بسیار مختصر از مشکل خود استفاده کنید. نامطلوب: کمک! کتابخانه X روی لپ‌تاپ من درست کار نمی‌کند! هوشمندانه: با استفاده از امکانY از کتاب‌خانه X برنامه من کار نمی‌کند! هوشمندانه تر: با استفاده از امکان Y در کتاب‌خانه X نسخه 5.8 برنامه من کرش (Crash) می‌کند. تصور کنید که به یک لیست از سوالات یک آرشیو نگاه می‌کنید، که فقط خطوط عنوان‌ها نمایش داده می‌شوند. عنوان پست خود را طوری انتخاب کنید که بخوبی سوال شما را منعکس کنید، تا شخص بعدی که آرشیو را جستجو می‌کند، بتواند دنبال آن ریسمان (thread) را بگیرد و به یک جواب برسد، بجای اینکه دوباره آن سوال را پست کند. رسیدن یک سوال در یک پاسخ، به خودی خود مورد شک است، چون آن فقط توسط افرادی دیده خواهد شد که این ریسمان را دنبال می‌کنند. پس یک ریسمان (تاپیک) جدید را آغاز کنید، مگر اینکه مطمئنید می‌خواهید فقط از افرادی بپرسید که در حال حاضر در این ریسمان فعال هستند. پاسخ دادن را آسان کنید پایان دادن سوال با این عبارت که «لطفاً پاسخ خو را به ... بفرستید»، جواب گرفتن شما را کاملاً بعید می‌سازد. بصورت واضح، از لحاظ دستوری صحیح، و با املای صحیح بنویسید مهم است که سوال خود را واضح و خوب بیان کنید. قبل از ارسال سوال خود یکبار متن سوالتان را بررسی و سعی خود را بکنید تا زبان (بیان) خود را بهبود دهید (صیقل دهید). لازم نیست که رسمی و سنگین باشد. در واقع افراد با تجربه به آن طرز بیانی بها میدهند که غیر رسمی، عامیانه، شوخ‌طبعانه و همراه با دقت و ظرافت باشد. اما باید دقیق باشد؛ باید نشانه‌هایی از اینکه که شما اندیشه و توجه می‌کنید را داشته باشد. این نکته بسیار مهم است که به زبان رسمی آن کانال ارتباطی سوال خود را ارسال کنید. برای مثال اگر در انجمنی که زبان رسمی آن فارسی است سوال خود را به زبان انگلیسی (یا فینگلیش) بنویسید سوال شما معمولا یا پاک خواهد شد و یا نادیده گرفته می‌شود. اگر دارید سوال خود را در انجمنی می‌پرسید که از زبان بومی شما استفاده نمی‌کند، شما یک میزان محدودی از خطاهای املایی و دستوری خواهید داشت، اما از روی تنبلی دچار خطاهای بیش از حد نشوید (بله، افراد معمولاً می‌توانند آن تفاوت را تشخیص دهند). همینطور اگر نمی‌دانید که شخص پاسخگو چه زبانی دارد، به انگلیسی بنویسید. افراد با‌تجربه مشغول، سوالات با زبانی که نمی‌فهمند را نادیده می‌گیرند، و انگلیسی زبان کاری اینترنت است. با نوشتن به زبان انگلیسی، این احتمال را که سوالتان بدون خوانده شدن پاک شود، به حداقل می‌رسانید. سوال خود را در قالب‌های استاندارد و در دسترس مطرح کنید نامه خود را به صورت پاراگراف‌هایی که از خطوط به هم پیچیده شده تشکیل شده‌اند، نفرستید. این کار، پاسخ گویی به قسمت‌های مختلف نوشته شما را دشوار می‌کند. هرگز تصور نکنید که مخاطبین شما قادر به خواند فایل‌های اختصاصی مانند Microsoft word یا Excel هستند. افراد مختلف از سیستم عامل‌های مختلف و برنامه‌های متفاوتی برای ویرایش متن استفاده می‌کنند پس بهترین گزینه این است که فایل خود را به صورت متنی ارسال کنید. در صفحات گفتگو، از اشکال خندان (Smile) و امکانات HTML استفاده نکنید. یکی دو تا از این اشکال ایرادی ندارد. اما در صورت استفاده بیش از حد. بهای سوال شما را کاهش می‌دهد و احتمال نادیده گرفته شدن سوال شما افزایش پیدا می‌کند. اگر شما از یک پردازش‌گر ایمیل با صورت گرافیکی کاربری مانند MS، Outlook، Netscape، Messenger و یا از این‌گونه‌ها استفاده می‌کنید، آگاه باشید که در صورتی که از تنظیمات پیش‌فرض آن استفاده می‌کنید، ممکن است این قوانین نقض شوند. بیشتر این پردازشگرها دارای یک دستور در فهرست خود به نام view source هستند از این گزینه در پوشه نامه‌های فرستاده خود استفاده کنید و فرستادن نوشته ساده (plain tent) بدون ضمایم غیر ضروری را بررسی کنید. درباره مشکل خود دقیق و آگاه باشید نشانه‌های مشکل ایجاد شده یا bug ها را به دقت و روشنی شرح دهید. محیطی که در آن این مشکل ایجاد می‌شود را شرح دهید. (سیستم عامل، کاربرد و ...) شرکت فروشنده و مدل آنرا هم معرفی کنید مثلاً (Fedora Coret یا Slackware 91 و ...). مطالعاتی که بر روی این مشکل انجام داده‌اید را شرح دهید. مراحل تشخیص مشکل و رفع آنرا که انجام داده‌اید، قبل از طرح سوال، شرح دهید. هرگونه تغییر در سخت‌افزار یا نرم‌افزار که اخیراً انجام شده است را شرح دهید. تلاش کنید تا به سوالاتی که پیش‌بینی می‌کنید از شما پرسیده شوند، پیش‌تر پاسخ دهید. حجم مطالب دلیلی بر دقیق بودن آن نیست باید دقیق و آموزنده بنویسید. این هدف با نوشتن حجم زیادی از داده‌ها و کدها در نامه تقاضای کمک محقق نمی‌شود. اگر یک مشکل بزرگ و پیچیده دارید، سعی کنید تا آنرا تا حد ممکن خلاصه و مرتب ارائه کنید. این امر حداقل سه فایده دارد. اول اینکه معلوم شود که شما برای خلاصه کردن سؤال خود تلاش کرده‌اید یا تمایل بیشتری برای پاسخ به شما وجود خواهد داشت. دوم اینکه با خلاصه‌سازی پاسخ مفیدتری هم خواهید گرفت؛ و سوم اینکه در حین خلاصه کردن و پیرایش گزارش خود ممکن است بتوانید مشکل را حل کنید یا راه حل کوتاه‌تری برای آن پیدا کنید. بدون اطمینان ادعای یافتن یک bug را نکنید! هنگامی که با یک نرم‌افزار به مشکل برخوردید، بدون اطمینان کامل ادعای یافتن یک bug جدید را مطرح نکنید. راهنمایی: تا هنگامی که با یک ضمیمه به کد منبع نتوانید مشکل را برطرف کنید یا با آزمایش رگرسیون با ورژن قبلی که نشان دهنده یک رفتار نادرست باشد، شما نباید مطمئن شوید. این امر در مورد وب سایت‌ها و مدارک هم صدق می‌کند سندی را به عنوان bug یافتید، باید متنی را جایگزین آن کنید یادآوری می‌شود که کاربران بسیاری هستند که مشکل شما را تجربه نکرده‌اند. همچنین شما با خواندن مطالب و وب سایت‌های مرتبط، در مورد آن نرم‌افزار آموزش دیده‌اید در غیر این صورت شما کاری را اشتباه انجام می‌دهید و نه نرم‌افزار. افرادی که یک نرم‌افزار را تهیه می‌کنند، تلاش می‌کنند تا آن نرم‌افزار حداکثر کارایی مطلوب را داشته باشد. اگر شما ادعا کنید که یک bug در آن یافته‌اید، در واقع کامل بودن کار آنها را زیر سؤال برده‌اید و این باعث رنجاندن آنهان می‌شود، حتی اگر حق با شما باشد. به خصوص ذکر کلمه bug در عنوان نامه، کار سیاست مدارانه‌ای نیست. وقتی که سوال خود را مطرح می‌کنید، بهتر است فرض کنید که شما کار اشتباهی را انجام می‌دهید، حتی اگر مطمئن باشید که یک bug واقعی را یافته‌اید. اگر واقعاً این طور باشد، در مورد آن در پاسخ‌ها خواهید شنید. با این کار نگهدارنده‌های نرم‌افزار از شما عذرخواهی خواهند کرد، همچنین اگر شما اشتباه کرده باشید، باید از آنها عذرخواهی کنید. به جای حدس‌های خود نشانه‌های مشکل را شرح دهید نوشتن در مورد اینکه خودتان علت مشکل پیش آمده را چه می‌دانید، مفید نیست (اگر فرضیات شما به‌کلی اشتباه باشد آیا با دیگران مشورت می‌کنید؟). لذا سعی کنید که به دوست‌داران کامپیوتر از علائم و نشانه‌های اولیه مشکل موجود بگویید و نه از فرضیات و تئوری‌های خود. بگذارید آنها خود تفسیر کنند و مشکل را تشخیص دهند اگر احساس می‌کنید که ذکر کردن حدس خودتان می‌تواند مهم باشد، آنرا روشن و تحت عنوان حدس خودتان بیان کنید و همچنین ذکر کنیدن که چرا این پاسخ نمی‌تواند جوابگوی مسئله باشد. هدف را مشخص کنید، نه مرحله اگر به دنبال این هستید که بدانید چطور باید کاری را انجام دهید (مثل گزارش کردن یک اشکال یا bug )، با شرح دادن هدف خود شروع کنید. بعد از آن فقط برخی از مراحل خاص که برای رسیدن به آن طی کردید و موفق نشدید را شرح دهید. اغلب، افرادی که به کمک تکنیکی نیاز دارند، هدف بلند مرتبه‌ای را در ذهن می‌پرورانند و در راهی که فکر می‌کنند تنها راه رسیدن به هدف است گمراه می‌شوند. آنها برای کمک گرفتن مرحله به مرحله می‌آیند اما نمی‌دانند که مسیر اشتباه است تلاش قابل توجهی برای گذر از این مرحله مورد نیاز است. سوال نامطلوب: چگونه می‌توان در برنامه FooDraw مقادیر RGB رنگ را بر مبنای شانزده‌تایی انتخاب کرد؟ سوال هوشمندانه: من تلاش می‌کنم که جدول رنگ‌ها را روی یک تصویر با مقادیر انتخابی خودم قرار دهم. در حال حاضر تنها راهی که به نظرم می‌رسد اینست که هر ردیف از جدول را اصلاح کنم اما نمی‌توانم در برنامه FooDraw رنگ‌ها را بر مبنای مقادیر RGB شانزده‌تایی انتخاب کنم. سوال دوم هوشمندانه بود. جواب این سوال ابزار بهتری برای آن کار را پیشنهاد می‌دهد. سوال را صریح مطرح کنید برای سوال‌هایی که انتهای مشخصی ندارد، بازه زمانی محدودی برای پاسخگویی به آنها در نظر گرفته نمی‌شود. کسانی که می‌خواهند پاسخ‌های مفیدی به شما بدهند، مشغول‌ترین افراد هستند. (چون در اغلب کارها به تنهایی کار می‌کنند). این گونه افراد نسبت به سوال‌هایی با بازه زمانی نامحدود حساسیت دارند و تمایل چندانی به پاسخ‌گویی به آنها ندارند. شما هنگامی که یک پاسخ مفید دریافت می‌کنید که از پاسخگویی خود در مورد چیزی که می‌خواهید به‌طور صریح پرسیده باشید (از اشاره‌گر استفاده کند، که بفرستید، پیوست را بررسی کنید یا هر چیز دیگر). این کار تلاش پاسخگو را بر روی هدف شما متمرکز می‌کند و به طور ضمنی حدی از نظر زمانی برای پاسخگویی و صرف انرژی برای کمک به شما ایجاد می‌کند. این کار خوبی است. برای درک دنیایی که متخصصین در آن زندگی می‌کنند، به مهارت به عنوان یک منبع و زمان فراوان برای پاسخگویی به یک مورد کمیاب فکر کنید. هر چه زمان کمتری را برای پاسخگویی به سوال خود به طور ضمنی در نظر بگیرید، احتمال اینکه جواب واقعاً مناسب از جانب یک فرد خبره و پرمشغله دریافت کنید، بیشتر می‌شود بنابراین بهتر است که برای سوال خود قالبی در نظر بگیرید که زمان مورد نیاز به پاسخگویی به آن را از جانب یک فرد خبره به حداقل برساند. اما این کار اغلب مشابه ساده‌سازی یک سوال نیست. به عنوان مثال، ممکن است برای شرح مناسبی از X یک راهنمایی بکنید؟ معمولاً سوال هوشمندانه‌تری است نسبت به اینکه ممکن است لطفاً X را توضیح دهید! اگر شما یک کد نادرست دارید، بهتر است در مورد اینکه چه اشکالی دارد بپرسید تا اینکه درخواست کنید کسی آنرا اصلاح کند. سوالهای بی‌معنی را حذف کنید از به پایان رساندن درخواست سوال خود با جملات بی‌مفهومی مانند کسی می‌تواند به من کمک کند؟ یا آیا جوابی وجود دارد؟ پرهیز کنید. اولاً، اگر شرح خود را تا نیمه نوشته بودید، این گونه سوال‌ها زائد هستند. دوماً، به دلیل زائد بودن آنها کاربران آنها را آزاردهنده تلقی می‌کنند و احتمال دارد که جواب‌هایی بی عیب و نقص ولی بی اعتنا مانند بله، به شما می‌توان کمک کرد. یا خیر، هیچ کمکی نمی‌توان کرد به شما بدهند. به طور کلی، از سوالهای آری یا خیر باید اجتناب شود مگر اینکه تنها جواب بله یا خیر برای شما کافی باشد. سوال خود را با کلمه «فوری» نشانه‌دار نکنید، حتی اگر برای شما اینگونه باشد: این مشکل شماست، نه دیگران. اظهار ضرورت کردن نتیجه معکوس می‌دهد. بیشتر کاربران به راحتی اینگونه سوال‌ها را که با خودخواهی و گستاخی درخواست توجه فوری و ویژه می‌کنند را حذف می‌کنند. تنها یک شبه استثناء وجود دارد. اگر شما در یک محل با مرتبه بالا و با یک نرم‌افزار کار می‌کنید و از نظر زمانی تحت فشار هستید، گفتن مودبانه محدودیت زمانی خود می‌تواند مؤثر باشد تا دیگران را به پاسخ دادن به شما ترغیب کند. البته این کار ریسک بالایی دارد، چون معیار جالب بودن مسائل از نظر کاربران دیگر با شما متفاوت است. به عنوان مثال فرستادن نامه از یک ایستگاه فضایی بین‌المللی قانع کننده است اما از جانب یک انسان با احساس خوب و مهربان یا یک سیاستمدار خیر. در واقع، نوشتن کلمه «فوری» باعث می‌شود که از سوال شما اجتناب و دوری شود حتی اگر از نظر آنها مهم باشد. اگر فکر می‌کنید که این امری مبهم است، دوباره این مطالب را بخوانید تا کاملاً آنرا درک کنید، قبل از آنکه نوشته‌ای را به جایی بفرستید. ادب و احترام را رعایت کنید مؤدب باشید. از جملاتی مانند «لطفاً» و «با تشکر از توجه شما» یا «ممنون از ملاحظه شما» استفاده کنید. به طور واضح بیان کنید که شما اینکه دیگران وقت خود را برای کمک به شما رایگان صرف می‌کنند، تحسین کنید. صادق بودن، به اندازه واضح، دقیق، با دستور زبان صحیح و مشروح بودن و پرهیز از قالب‌های مالکانه، مهم نیست و حتی جایگزین آنها هم نمی‌تواند باشد. کاربران بطور کلی علاقه دارند که گزارش‌های دقیق تکنیکی از bug ها و ایرادها را هر چند بی ادبانه دریافت کنند تا نوشته‌های مؤدب ولی ابهام‌آمیز. (اگر این امر برای شما مبهم است، به یاد داشته باشید که سوال‌ها را با چیزی که توسط آن می‌توان یاد گرفت ارزش‌گذاری می‌کنند). به هر حال اگر مشکلات تکنیکی خود را ردیف کنید، مؤدب بودن شانس شما را برای دریافت پاسخ مفید افزایش می‌دهد. باید ذکر شود که تنها مخالفتی که از سوی کاربران قدیمی نسبت به این نوشته دریافت کرده‌ایم، در رابطه با توصیه‌های قبلی ما برای تشکر پیشاپیش است. برخی از کاربران احساس می‌کنند که این دلالتی به منظوری دارد و نه تشکر. توصیه ما اینست که هم پیشاپیش تشکر کنید و هم بعد از پاسخ‌گویی و یا ادب و احترام را به روشهای دیگری بیان کنید قبلاً با جملاتی مثل: «با تشکر از توجه شما» یا «ممنون از ملاحظه شما». روش حل را با یادداشت مختصری پاسخ دهید بعد از اینکه مسئله حل شد، یادداشتی به همه کسانی که به شما کمک کرده‌اند بفرستید، آنها را از نحوه‌ی حل مطلع کنید؛ و باز هم از یاری آنها تشکر کنید. پاسخ شما نباید طولانی و شامل جملاتی ساده مثل: «ایراد از کابل شبکه بود، با تشکر از همه» باشد. حتی اگر پاسخ ندهید، بهتر از این جملات است. پاسخ کوتاه و خلاصه‌ای شیرین بهتر است از یک مقاله طولانی مگر اینکه عمق تکنیکی مسئله زیاد باشد. ذکر کنید که چه عملی مشکل را حل کرد اما لزومی ندارد که تمام مراحل حل مشکل را گزارش کنید. برای برخی از مسائل مناسب است که خلاصه‌ای از مراحل رفع مشکل را گزارش کنید. وضعیت نهایی مسئله خود را شرح دهید. توضیح دهید که چه روشی شما را به حل رساند و بعد از آن به داده‌هایی که جواب نمی‌رسد اشاره کنید. روشهای اشتباه را باید بعد از جواب صحیح و دیگر مطالب خلاصه بیاورید تا اینکه خلاصه شما تبدیل به یک داستان کارآگاهی نشود. از افرادی که به شما کمک کردند نام ببرید، با این کار با آنها دوست هم می‌شوید. در نهایت، این گونه خلاصه نویسی به تمام کسانی که کمک کرده‌اند، احساس رضایت‌مندی و نزدیکی به مسئله می‌دهد و این کم ارزش نیست. اگر شما یک تکنسین یا فرد باتجربه نیستید، مطمئن باشید که این احساس برای راهنماها و متخصصینی که از آنها کمک گرفته‌اید، بسیار مهم است. اگر نفهمیدید... اگر جواب را نفهمیدید، فوراً تقاضای روشن کردن پاسخ نکنید. از همان اندازه‎هایی که برای پاسخ اولیه خودتان (دستورالعمل‎ها ( FAQS)، وب و دوستان ماهر) برای فهمیدن جواب استفاده کنید. سپس اگر باز هم نیاز به شفاف سازی نشان دهید که چه چیزی یادگرفته‎اید. برای مثال تصور کنید که من به شما می‎گویم: "به‎نظر می‎رسد که شما Zentry گرفته شده‎ای دارید، باید آنرا تمیز کنید." در این صورت یک جواب نامناسب این خواهد بود: « Zentry چیست؟» و یک جواب خوب این خواهد بود "بسیار خوب، من صفحه اصلی را خواندم و به Zentry ها تحت عنوان سوئیچ‎های –Z و –P اشاره شده است اما هیچ یک از تمیز کردن Zentry چیزی نگفته‎اند. آیا اینها درست است یا من نکته‎ای را متوجه نشده‎ام؟" اخلاق حرفه ای داشته باشید با توجه به راه‎های مفصلی که در این‎جا گفته شد یا راه‎های مشابه بعید است که در راه‌های ارتباطی با افراد باتجربه اشتباه کنید. به‎طور دقیقی با جملات متفاوت به شما گفتیم که چگونه می‎توان اشتباه کرد. اگر چنین اتفاقی افتاد بدترین کار اینست که از این تجربه خود ناله کنید، ادعا کنید که شفاهاً مورد توهین قرار گرفته‎اید، تقاضای عذرخواهی کنید، نقستان را حبس کنید، به شکایت کردن تهدید کنید، از افراد شکایت کنید و غیره. در عوض پیش بروید. این امری طبیعی است. درواقع مناسب و سالم است. گاهی اوقات افراد بدون هیچ دلیل روشنی شخصاً شما را مورد حمله قرار می‎دهند حتی اگر شما اشتباهی نکرده باشید (یا فقط در ذهن آنها دچار اشتباه شده‎اید) در این موارد، شکایت کردن روشی واقعاً اشتباه است. این افرادِ متجاوز، نادان هم هستند که بدون هیچ دلیلی، خود را با تجربه می‎دانند یا با آزمایش‎های روان‎شناسی می‎خواهند بدانند که اشتباه کرده‎اید یا خیر. خوانندگان دیگر هم آنها را نادیده می‎گیرند و یا با روش خودشان با آنها برخورد می‎کنند رفتار این‎گونه افراد خود آنها را دچار مشکل می‎کند که به شما ربطی ندارد. اجازه ندهید که داخل این‎گونه بحث‎ها به دام بیفتید. بعد از اینکه بررسی کردید که آیا آنها واقعاً توهین هستند و نه اشاره‎ای به اشتباه شما و نه اشاره‎ای به اشتباه شما و نه اشاره‎ای زیرکانه به جواب واقعی سوال شما اغلب توهین‎ها نادیده گرفته می‎شوند. به اطلاعات موجود در فایل های ارسالی و ضمیمه توجه کنید در بسیاری از مواقع ممکن است سوال شما همراه با فایل (یا فایل های) ضمیمه‌ای باشد که مشکل را دقیق‌تر به پاسخ دهند‌گان شرح میدهد. حتما قبل از ارسال فایل ضمیمه به موارد زیر توجه کنید: فایل ارسالی حاوی اطلاعات شخصی افراد نباشد. این موارد حریم شخصی افراد را نقض میکند و ممنوع می‌باشد. در صورتی که سوال شما مربوط به نحوه‌ی نمایش آن اطلاعات است میتوانید با ابزار ویرایش تصویر یا فایل، اطلاعات شخصی را حذف کنید.
  20. 1 امتیاز
    همانطور که می‌دانید، حریم خصوصی به اطلاعاتی گفته می‌شود که آن اطلاعات می‌تواند در صورت فاش شدن آسیب‌هایی را به صاحب داده چه از لحاظ روحی و چه مالی و یا جسمی وارد سازد. اطلاعاتی چون وضعیت تاهل، تاریخ تولد، کد ملی، اطلاعات مالی و اعتباری، اطلاعات پزشکی، اطلاعات تماس و مانند آن که بتوان از آن داده‌هایی جدید را استخراج و یا از آن استفاده تجاری و غیر تجاری نمود را حریم شخصی می‌نامند. آی‌ او‌ استریم با تاکید بر احترامی که برای حریم شخصی کاربران قائل است، برای گفتگو، سفارش خرید، مشاوره، شبکه سازی، معتبر سازی، ثبت نظر یا استفاده از برخی امکانات وب سایت اطلاعاتی را از کاربران درخواست می‌کند تا بتواند خدماتی امن و مطمئن را به کاربران ارائه دهد. برای اینکه افراد متقاضی بتوانند خود را بر اساس شرایط موجود در قوانین به جامعه‌ی برنامه‌نویسی کشور معرفی کنند، لازم است تا نام و نام خانوادگی و تخصص کاربران پرسیده شود. در بخش مرکز دریافت اسناد، سورس کُد‌ها، محصولات، مقالات و کتاب‌های علمی بعضاً به صورت تجاری (پولی و غیر رایگان) در اختیار کاربران قرار می‌گیرد که کاربران باید توجه داشته باشند این مرجع شدیداً به حفظ حقوق چاپ، توسعه و تکثیر عاملین فایل‌های ارسالی احترام قائل است. بنابراین کاربران با پذیرش قوانین موظف به رعایت انسان دوستانه‌ی حقوق چاپ و تکثیر چنین مواردی خواهند شد. در بخش مراکز دریافت و فروشگاه برای پردازش و ارسال سفارش، اطلاعاتی مانند آدرس، شماره تلفن و ایمیل مورد نیاز است و از آنجا که کلیه فعالیت‌های آی او استریم قانونی و مبتنی بر قوانین تجارت الکترونیک صورت می‌گیرد. یادآوری می‌شود آدرس ایمیل و تلفن‌هایی که کاربر در پروفایل خود ثبت می‌کند، تنها آدرس ایمیل و تلفن‌های رسمی و مورد تایید مشتری است و تمام مکاتبات و پاسخ‌های شرکت (دات‌ویوز) و جامعه‌ی برنامه‌نویسان آی او استریم از طریق آنها صورت می‌گیرد. بنابراین درج آدرس، ایمیل و شماره تماس‌های همراه و ثابت توسط مشتری، به منزله مورد تایید بودن صحت آنها است و در صورتی که موارد فوق به صورت صحیح یا کامل درج نشده باشد، آی او استریم جهت اطمینان از صحت و قطعیت ثبت سفارش می‌تواند از مشتری، اطلاعات تکمیلی و بیشتری درخواست کند. مشتریان می‌توانند نام، آدرس و تلفن شخص دیگری را برای مکاتلات و فعالیت‌های خود در این شبکه و همچنین در بخش‌های ویژه مانند تحویل گرفتن سفارش وارد کنند و آی او استریم تنها برای ارسال همان سفارش، از این اطلاعات استفاده خواهد کرد. همچنین آی او استریم ممکن است برای ارتباط با کاربران، بهینه سازی محتوای وب سایت و تحقیقات بازاریابی از برخی اطلاعات استفاده کند و برای اطلاع رسانی رویدادها و اخبار، خدمات و سرویس‌های ویژه یا پروموشن‌ها، برای اعضای وب سایت ایمیل یا پیامک ارسال نماید. در صورتی که کاربران تمایل به دریافت اینگونه ایمیل ها و پیامک‌ها نداشته باشند، می‌توانند عضویت دریافت خبرنامه آی او استریم را در پروفایل خود لغو کنند. عدم اقدام جهت لغو، به منزله ی موافقت ضمنی با دریافت ایمیل ها و پیام ها و سلب حق اعتراض میباشد. مرجع ممکن است نقد و نظرهای ارسالی کاربران را در راستای رعایت قوانین وب سایت ویرایش کند. همچنین اگر نظر یا پیام ارسال شده توسط کاربر، مشمول مصادیق محتوای مجرمانه باشد، آی او استریم می‌تواند از اطلاعات ثبت شده برای پیگیری قانونی استفاده کند. کاربران ضمن استفاده از خدمات وبسایت آی او استریم، حق ویرایش اطلاعات و استفاده از آنها را در چارچوب فوق الذکر به مرجع اعطاء نموده و حق اعتراض را از خود سلب می‌نمایند. باید تاکید شود که حفظ و نگهداری رمز عبور و نام کاربری بر عهده کاربران است و لذا برای جلوگیری از هرگونه سوء استفاده احتمالی، کاربران نباید آن اطلاعات را برای شخص دیگری فاش کنند. در صورتی که کاربر شماره همراه خود را به فردی دیگر واگذار کرد، جهت جلوگیری از سوء استفاده یا مشکلات احتمالی کاربران باید شماره موبایل خود را در پروفایل تغییر داده و شماره جدیدی ثبت نمایند. مسئولیت هرگونه خسارت احتمالی که ناشی از عدم رعایت موارد فوق الذکر توسط کاربر باشد، با خود کاربر بوده وکاربر حق هر گونه ادعا علیه مرجع را از خود سلب می‌کند. آی او استریم هویت شخصی کاربران را محرمانه می‌داند و اطلاعات شخصی آنان را به هیچ شخص یا سازمان دیگری منتقل نمی‌کند، مگر اینکه با حکم مقام قضائی یا اداری صالحه یا طبق قوانین و مقررات رایج کشور موظف باشد در اختیار مراجع ذی‌صلاح قرار دهد.در این موارد هیچ گونه مسئولیت قانونی مبنی بر جبران خسارت برای مرجع وجود ندارد و کاربران با اعلام رضایت خود در استفاده از خدمات وب سایت ضمنا حق هرگونه اعتراض را از خود سلب نموده اند. همچنین بدین وسیله به اطلاع کاربران رسانده می‌شود که آی او استریم همانند سایر وب سایت‌ها از جمع آوری IP و کوکی‌ها استفاده می‌کند، اما پروتکل، سرور و لایه‌های امنیتی مرجع و روش‌های مناسب مدیریت داده‌ها حداکثر تلاش را به عمل می آورد که اطلاعات کاربران را محافظت و از دسترسی‌های غیر قانونی جلوگیری کند. طبیعتاً مسئولیت هرگونه سوء استفاده به شخص یا اشخاص متخلف مربوط بوده و ای او استریم حق اعتراض و پیگیری را از طریق قانونی بنابر صلاحدید خود محفوظ می‌دارد. آی او استریم برای حفاظت و نگهداری اطلاعات و حریم شخصی کاربران همه توان خود را به کار می‌گیرد و امیدوار است که تجربه‌ی مشارکت و گفتگو، معرفی و کسب‌و‌کار راحت و خوشایند را برای همه کاربران فراهم آورد. در صورت وجود هرگونه سوال، لطفاً با آدرس ایمیل info@iostream.ir با ما در ارتباط باشید.
  21. 1 امتیاز
    قوانین و قالب اصول نگارشی در مرجع آی او استریم نسخه‌ی 1.3.0 با توجه به اهداف مرجع، ارائه اسناد و محتوای معتبر رعایت اصول صحیح نگارشی در ترجمه، بازنشر و دیگر شرایط تولید محتوا نیاز است. بنابر‌این برای یادگیری شیوه نگارش و نحوه‌ی صحیح نوشتن شما می‌توانید شیوه‌ی صحیح نوشتن و استفاده از علائم نگارشی را بیاموزید. توجه داشته باشید که، جهت ارتقا درجه‌ی کاربری به مدیران و میانجی‌گران برای ایجاد پُست، ویرایش و ارسال آن حتماً باید قوانین زیر را بپذیرید. در غیر این صورت هیچ تاکیدی بر تصحیح نگارش نخواهد بود و پُست شما به عنوان پُست های نا معتبر و غیر استاندارد بلوکه خواهند شد. متن زیر بر همین اساس آماده شده است و به مرور زمان تکمیل خواهد شد. توجه داشته باشید که شرایط زیر در سراسر سیستم نرم‌افزاری که شامل ماژول‌های مختلفی چون (خبر، وبلاگ، پادکست، مستندات و ...) می‌شود. و عدم رعایت آن موجب عدم تایید و حتی لغو مقاله شما خواهد گردید. قبل از هر چیز به نمونه مثال زیر توجه کنید: عنوان آزمایشی متن (انتخاب سر نویس ۳) این متن آزمایشی است جهت نمایش یک پاراگراف از اندازه، چیدمان و دیگر موارد نگارشی که بدون اعمال هیچ گونه اندازه و سر نویسی نوشته شده است. برای اینکه پاراگراف‌های زیب و یک‌دست در سرتاسر وب سایت داشته باشیم لازم است این قانون را رعایت نماییم. با توجه به اهداف مرجع ممکن است در آموزش‌های شما در میان متن فارسی از متن انگلیسی یا کد‌های برنامه نویسی استفاده کنید که برای مثال : کتابخانه STL یک کتابخانه‌ی استاندارد کتابخانه‌ای با نام iostream وجود دارد که با تکه کد #include <iostream> وارد می‌شود. برای حل این مشکل آن تگ < > کد را بر روی نوشته خود اعمال کنید#include <iostream>نتیجه به صورت یک تکه کد درون خطی نمایش داده می‌شود. در برخی موارد کاراکتر‌های خاص مانند C++ لازم است به صورت صحیح نوشته شود، معمولاً برای این کار آن را به صورت برعکس می‌نویسد اما این کار پیشنهاد نمی‌شود چرا که در بحث سئو تاثیر منفی خواهد گذاشت. ما برای حل این مشکل یک افزونه با عنوان L در نظر گرفته ایم که می‌توانید کاراکتر‌های خود را انتخاب کنید و آن را بر روی آن اعمال نمایید. مثال : زبان برنامه‌نویسی C++ بدون اعمال تگ L مثال : زبان برنامه‌نویسی C++ تگ L اعمال شده است بنابراین نکاتی که همه ما به آن در تولید محتوا توجه می‌کنیم به صورت زیر هستند: قبل از شروع نگارش فارسی به «راست چین بودن» محیط ویرایشگر توجه می‌کنیم. برای نگارش صحیح فارسی از صفحه کلید استاندارد فارسی در ویندوز و گنو/لینوکس و مک استفاده می‌کنیم. این صفحه کلید به صورت پیش‌فرض در سیستم عامل گنو/لینوکس و مک نصب است. همینطور در نسخه‌های جدید ویندوز(از ۸ و به بعد) قابل فعال‌سازی در این سیستم عامل نیز است. در جملات از «می‌باشد» و «نمی‌باشد» استفاده نمی‌کنیم. معادل این کلمات به ترتیب «است» و «نیست» است. معادل واژه‌ها بسیار مهم هستند، برای مثال کیبورد معادلش در فارسی صفحه‌کلید است و بهتر است از معادل فارسی استاندارد استفاده شود. در نگارش صحیح فارسی هیچ‌گاه پیشوندها و پسوندها به صورت چسبیده نوشته نمی‌شوند. مثلاً: نمیشوند، میروم، جنگلها، پرندهگان، طراحیها، آنها و… همگی غلط هستند. برای نوشتن پیشوندها و پسوندها به صورت جداگانه، چنانچه حروف دو بخش به صورت پیش‌فرض احتمال چسبیدن به هم را داشته باشند برای جداسازی آن‌ها از نیم فاصله استفاده می‌کنیم. مثلاً: نمی‌شود، می‌شود، توسعه‌دهنده، برنامه‌نویس، کسب‌و‌کار‌، می‌رسم، نمی‌خورم، گله‌ها، سبزه‌زار‌ها، طراحی‌ها، آن‌ها و… همگی درست هستند. برای درج نیم فاصله در صفحه کلید استاندارد فارسی از Shift + Space که تقریبا در تمامی سیستم‌عامل‌ها همین ترکیب را دارد استفاده می‌کنیم. در هنگام استفاده از کاراکترها (نظیر . ! ؟ ، … : ؛) باید به این نکته توجه کرد که آن‌ها بدون هیچ فاصله‌ای به کلمه قبل از خود می‌چسبند. همینطور پس از آن‌ها همیشه یک فاصله وجود دارد. چنانچه در متن از کلمات و یا عباراتی به زبانی دیگر استفاده شده بود حتماً در نخستین جایی که از آن کلمات و یا عبارات استفاده می‌کنیم باید معادل آن به زبان اصلی در درون پرانتز و بلافاصله پس از استفاده درج شود. مثلاً جملات زیر را در نظر بگیرید: پردازنده و رم (RAM) رایانه حتماً باید با هم سازگاری داشته باشند. زبان برنامه‌نویسی سی‌پلاس‌پلاس (++C) و فناوری کیوت کوئیک (Qt Quick). جی. کی. رولینگ (J. K. Rowling) خالق مجموعه داستان‌های هری پاتر (Harry Potter) در مصاحبه اخیر خود با بی بی سی (BBC) از قصد خود در خصوص نوشتن سری جدیدی از داستان‌ها خبر داد. نوروزبل (نؤرۊزبل) عید باستانی مردم خطه کاسپین است. به هیچ عنوان هیچ یک از اصطلاحات علمی را به فارسی نباید ترجمه و باز نشر کنیم، برای مثال : فناوری کیوت کوئیک (فناوری کیوت سریع) این غلط است. چنانچه در متن از کلمات و یا عبارتی به زبان فارسی استفاده شود که معادل غیر فارسی آن مفهوم را به شکل بهتری برساند، معادل غیر فارسی در هنگام نخستین استفاده در درون پرانتز نوشته می‌شود. مثلاً جملات زیر را در نظر بگیرید: راهنمای فایل (File Directory) یکی از روش‌های رایج دسترسی به فایل‌ها در سیستم عامل‌ها است. طراحی رابط کاربری (UI) و تجربه کاربری (UX) دو مقوله جدا از هم هستند. چنانچه در متن از عبارات مخفف (فارسی و یا غیر فارسی) استفاده کرده باشیم در نخستین استفاده حتماً باید عبارت کامل در درون پرانتز درج شود. مثلاً جملات زیر را در نظر بگیرید: جهت استفاده از کتابخانه‌هایی چون Qt باید \(سطوح مقدماتی و متوسط زبان برنامه‌نویسی ++C) را به خوبی پشت گذاشته باشید. جَک (JAC (Jangal Accounts)) سیستم یکپارچه‌ای برای مدیریت حساب‌های کاربری در سرویس‌های گوناگون است که توسط شرکت جنگل ساخته شده و مورد استفاده قرار می‌گیرد. هرگاه در متن نیاز به درج توضیحات تکمیلی باشد از پرانتز استفاده می‌کنیم. مثلا: دات‌ویوز (شرکت دات‌ویوز (Dotwaves) با (مسئولیت محدود)) بزرگترین تولید کننده نرم‌افزار در شمال غرب کشور است. متن باید دارای افعالی یکپارچه باشد. این بدان معناست که فعل‌های خبری متن همگی باید دارای یک نقش باشند. مثلاً اگر در حال نوشتن متن دستور پخت یک غذا باشیم، عبارت زیر غلط خواهد بود: برای طراحی یک نرم‌افزار تحت کیوت ابتدا باید محیط توسعه را نصب و راه اندازی کرد. سپس تحت زبان برنامه‌نویسی ++C و فناوری Qt Quick آن را طراحی و توسعه می‌دهیم. متن باید دارای لحنی یکپارچه باشد. مثلاً اگر در قسمتی از متن از زبان محاوره استفاده کردیم در جای دیگر نباشد از زبان کتابی صحبت کنیم. مثلاً ۲ جمله اول هر دو درست هستند ولی جمله سوم غلط است. قراره من در این آموزش برای شما بگم که چطور در رابطه با برنامه‌نویسی سطح پایین دانشتان را ارتقا دهید! (غلط) قراره من در این آموزش برای شما بگم که چطور در رابطه با برنامه‌نویسی سطح پایین دانشتون رو ارتقا بدین (صحیح) قرار است من در این آموزش برای شما نحوه ارتقا دانشتان در برنامه‌نویسی سطح پایین را توضیح دهم. (صحیح) در متن هرجا که لازم باشد به مهم بودن بخشی خاص اشاره شود آن را بلد (Bold) می‌کنیم. مثال: آوردن ماشین حساب در امتحان ریاضی مهندسی ممنوع نیست. در پاراگراف‌های موجود در متن باید سعی شود که تا جایی که امکان دارد در جملات پشت سر هم از کلمات یکسان استفاده نشود. مثلاً متن زیر به خاطر تکرار کلمات یکسان (در این مثال جاوا اسکریپت و است) متن زیبایی نیست: جاوا اسکریپن یک زبان پر طرفدار است. جاوا اسکریپت پر کاربرد ترین زبان در لایه رابط کاربری است. جاوا اسکریپت ملقب به نام «JS» است. چنانچه در متن بخواهیم یکپارچگی عبارتی را نشان دهیم آن را درون «» قرار می‌دهیم. این کار برای سهولت خواندن متن انجام می‌شود. چنانچه در متن بخواهیم که جمله‌ای را نقل قول کنیم آن را در درون «» قرار می‌دهیم. اگر متن نقل قول شده بیشتر از یک جمله بود به غیر از استفاده از علامت فوق از فونتی کوچکتر و یا اتالیک (Italic) استفاده می‌شود. البته برای راحتی کار و یکسان بودن بهتر است بر روی دکمه قالب روی ویرایستار کلیک کرده و از بخش بلوک‌ (بلوک نقل قول) را انتخاب کنید. در محیط وب اگر در متن از کلمات و یا عباراتی استفاده شود که توضیحاتی مفصل از آن در جایی دیگر موجود باشد، آن کلمات و یا عبارات را به همان جایی که توضیحات مفصل آن وجود دارد پیوند (Link) می‌کنیم. در هنگام لینک کردن عبارات در وب چنانچه لینک مورد نظر خارج از آدرسی خارج از سایت خودمان باشد حتماً باید لینک در تبی (Tab) جداگانه باز شود. در هنگام لینک کردن عبارات حتماً برای آن عنوانی (Title) در نظر می‌گیریم. این عنوان زمانی که ماوس بر روی لینک قرار بگیرد نمایش داده می‌شود. این عنوان باید متنی باشد که توضیحات بیشتر را در مورد لینک بدهد. مثلاً اگر کلمه رشت را به صفحه ویکی‌پدیا فارسی رشت لینک کرده‌ایم یکی از عنوان‌های مناسب می‌تواند «در مورد رشت در ویکی‌پدیا فارسی بیشتر بخوانید.» باشد. چنانچه در محیط وب متنی را از جایی نقل و قول (و یا کپی) کردیم حتماً باید در صفحه خودمان به آن مطلب لینک بدهیم. این لینک می‌تواند درون متنی باشد و یا اینکه در انتهای متن‌مان به عنوان منبع ذکر شود. در وب چنانچه مایل به استفاده از تصاویر در متن‌مان بودیم حتماً مسأله اندازه (حجم)‌آن را در نظر می‌گیریم. معمولاً از تصاویر با حجم پایین در درون متن استفاده می‌شود و اگر لازم بود که خواننده به تصویر با اندازه اصلی دسترسی داشته باشد معمولاً این تصویر به تصویر کم حجم موجود در متن لینک می‌شود. در نوشتن مطالب از فونت‌های عجیب و غیر استاندارد و یا اندازه‌های بسیار بزرگ/کوچک استفاده نمی‌کنیم. هر چند فونت‌های استاندارد بر روی ویرایستار تعبیه شده است اما همینطور حتی‌الامکان رنگ‌ها و فونت و اندازه‌های پیش‌فرض را تغییر نمی‌دهیم. (مگر اینکه واقعاً در مواردی خاص نیاز به این کار باشد.) کاراکترهای اعداد در زبان‌ فارسی با زبان‌هایی نظیر انگلیسی و عربی کاملاً متفاوت است. در نگارش فارسی فقط و فقط از کاراکترهای فارسی اعداد استفاده می‌کنیم. این کاراکترها ۱۲۳۴۵۶۷۸۹۰ هستند. تنها زمانی مجاز به استفاده از کاراکترهای اعداد انگلیسی و عربی هستیم که در حال ذکر معادل‌های غیر فارسی باشیم. مثلا: فایل ام پی تری (MP3) یکی از فرمت‌های رایج موسیقی است. ام فور (M4) یکی از اسلحه‌های رایج بازی کانتر است. در لیست‌ها اعداد شماره‌گذاری را به صورت دستی وارد نمی‌کنیم! برای این کار از ابزار تعبیه شده در محیط نگارش استفاده می‌کنیم. (همینطور در لیست‌های غیر مرتب نیز کاراکترهای شروع کننده پاراگراف را دستی وارد نمی‌کنیم.) در نگارش جدید فارسی از ی مالکیت استفاده نمی‌شود. مثلاً عبارات زیر همگی غلط هستند: خانه‌ی ما علاقه‌ی مفرط پذیرنده‌ی جدید برخی از کاراکترها نظیر ی و ک در فارسی متفاوت با عربی است. در نگارش فارسی دقت می‌کنیم که از کاراکترهای عربی استفاده نکنیم. برای خوانایی متن و بالا بردن درک مطلب از پاراگراف‌ استفاده می‌کنیم. هر پاراگراف متشکل از یک یا چند جمله است که نزدیکی محتوایی دارند. پس از اتمام پاراگراف فارغ از اینکه جمله نهایی در کجا به پایان رسیده است به خط بعدی می‌رویم. پس از انتشار مطلب در محیط وب چنانچه پس از گذشت مدتی طولانی قسمتی از متن با حقایق روز متفاوت بود بر روی آن خط می‌کشیم. همچنین اگر لازم بود بخشی را به عنوان اصلاحیه اضافه می‌کنیم. متن زیر را در نظر بگیرید: سیستم عامل مَک او اِس ایکس (Mac OS X) در حال حاضر جدیدترین سیستم عامل ساخته شده توسط شرکت اپل (Apple) است. یکی از ویژگی‌های جدید افزوده شده به این سیستم عامل ظاهر بسیار زیبای آن است. حال این متن را پس از گذشت چند سال به شکل زیر تغییر می‌دهیم: سیستم عامل مَک او اِس ایکس (Mac OS X) در حال حاضر جدیدترین سیستم عامل ساخته شده توسط شرکت اپل (Apple) است. (در حال حاضرسیستم عامل مَک او اِس سییرا (macOS Sierra) جدیدترین سیستم عامل اپل است.) یکی از ویژگی‌های جدید افزوده شده به این سیستم عامل ظاهر بسیار زیبای آن است. اگر در متن در حال توضیح موضوع خاصی هستیم بهتر است که در جاهایی از معادل‌های مترادف آن موضوع استفاده کنیم. مثلاً اگر در حال معرفی یک نرم‌افزار هستیم می‌توانیم برای اشاره به آن از کلماتی نظیر نرم افزار، برنامه، اپ و اپلیکیشن استفاده کنیم. به طور کلی در متن از کلمات و عباراتی که از زبان دیگری آمده‌اند استفاده نمی‌کنیم ولی این مسأله نباید باعث کاهش خوانایی و مفهوم متن شود. ساده نویسی یکی از اصول اصلی نگارش است. اینکه از چه مجموعه از کلمات و عباراتی در متن‌مان استفاده کنیم بستگی به سطح خوانندگان‌مان دارد. مثلاً اگر در حال نوشتن یک متن برای برنامه نویسان هستیم به راحتی می‌توانیم از کلماتی نظیر UX و UI و.. استفاده کنیم ولی استفاده از این کلمات در یک متن عمومی توصیه نمی‌شود و در صورت استفاده حتماً باید معانی آن‌ها به صورت کامل در درون پرانتز و یا پاورقی درج شود. روش ارسال کد‌ در قالب مناسب برای درک بهتر مطلب توسط ابزار <> در صورتی که مقاله، سند یا مطلب خاصی را منتشر می‌کنید که دارای تکه کدی است آن را در داخل تگ کد قرار می‌دهیم که نمونه مثال‌های آن به صورت زیر نمایان خواهند شد: نمونه مثال خروجی کد C //A Hello World! program in C. #include <stdio.h> int main() { // printf() displays the string inside quotation printf("Hello, World!"); return 0; } نمونه مثال خروجی کد ++C // A Hello World! program in C++. #include <iostream> using namespace std; int main() { cout << "Hello, World!"; return 0; } نمونه مثال خروجی کد در Java //A Hello World! program in Java. public class HelloWorld { public static void main( String[] args ) { System.out.println( "Hello World!" ); System.exit( 0 ); //success } } نمونه مثال خروجی کد در JavaScript // A Hello World! program in JavaScript. const btn = document.getElementById('button'); btn.addEventListener('click', function() { alert('Hello World!'); نمونه مثال خروجی کد در QML // A Hello World! program in QML. import QtQuick 2.0 Rectangle { id: page width: 320; height: 480 color: "lightgray" Text { id: helloText text: "Hello world!" y: 30 anchors.horizontalCenter: page.horizontalCenter font.pointSize: 24; font.bold: true } } نمونه مثال خروجی کد در PHP // A Hello World! program in PHP. $text = "Hello, World!"; $x = 5; $y = 4; echo "<h2>" . $text . "h2><br>"; echo $x + $y; نمونه مثال خروجی کد در Node.JS // A Hello World! program in Node.JS const express = require('express') const app = express() app.get('/', (req, res) => res.send('Hello World!')) app.listen(3000, () => console.log('Example app listening on port 3000!')) نمونه مثال خروجی کد در CSS p { text-align: center; color: red; } نمونه مثال خروجی کد در #C // A Hello World! program in C#. using System; namespace HelloWorld { class Hello { static void Main() { Console.WriteLine("Hello World!"); // Keep the console window open in debug mode. Console.WriteLine("Press any key to exit."); Console.ReadKey(); } } } نمونه مثال خروجی کد در Ruby #!/usr/bin/ruby print "Hello, World!\n" نمونه مثال خروجی کد در Python # This program prints Hello, world in Python! print('Hello, world!') و اما یک نکته‌‌ی اساسی در نشر محتوا این است که برای مخفی نگه داشتن بخشی از پاسخ‌ها که نیاز نیست برای همه قابل نمایش باشد از گزینه اسپویلر یا همان مخفی کردن با علامت چشم بر روی ادیتور استفاده می‌کنیم تا محتوا به صورت همین نمونه نمایان شود.
  22. 1 امتیاز
    در این مقاله من قصد دارم در رابطه با تفاوت‌های اختصاص دادن حافظه در اِستک و هیپ توضیحاتی دهم که بسیاری از علاقه‌مندان راجب آن‌ها سوال کرده اند. با توجه به اینکه، از اوایل سیستم‌های کامپیوتری این تمایز در این وجود داشته است که برنامه های اصلی در حافظه فقط خواندنی مانند ROM ٬ PROM و یا EEPROM نگه داری می‌شوند. به عنوان دیگر از زمانی که سیستم ها پیچیده تر شدند برنامه ها از حافظه های دیگری مانند RAM به جای اجرا در حافظه ROM استفاده کردند. این ایده به خاطر این بود که تعدادی از قسمت های حافظه مربوط به برنامه نباید تغییر یابند و در این حالت باید حفظ شوند. در این میان دو بخش .text و .rodata بخشی‌هایی از برنامه هستند که می‌تواند به بخش های دیگر برای وظایف خاص تقسیم شوند که در ادامه به آن‌ها اشاره شده است. بخش کد، به عنوان یک بخش متنی (.text) و یا به طور ساده به عنوان متن شناخته می‌شود. جایی است که بخشی از یک فایل شیء یا بخش مربوطه از فضای آدرس مجازی برنامه که حاوی دستورالعمل های اجرایی است و به طور کلی فقط خواندنی بوده و اندازه ثابتی دارد می‌باشد. بخش .bss که به عنوانی بخشی ویژه (محل نگه داری اطلاعات تخصیص داده نشده (مقدار دهی نشده)) محلی که متغیر‌های سراسری و ثابت با مقدار صفر شروع می‌شوند. بخش داده (.data) حاوی هر گونه متغیر سراسری و یا استاتیک که دارای یک مقدار از پیش تعریف شده هستند و می‌توانند اصلاح شوند. تصویر زیر طرح معمولی از یک حافظه برنامه ساده کامپیوتری را با متن٬ داده های مختلف٬ و بخش‌های استک و هیپ و bss را نشان می‌دهد. برای مثال در کد C به صورت زیر خواهد بود: int val = 3; char string[] = "Hello World"; مقادیر برای این نوع متغیر‌ها در ابتدا در حافظه فقط خواندنی ذخیره می‌شوند. (معمولا در داخل .text) و در زمان اجرای برنامه که به صورت روتین خواهد بود در بخش .data کپی می‌شوند. بخش BSS یا همان .BSS در برنامه نویسی کامپیوتری، نام .bss یا bss توسط بسیاری از کامپایلرها و لینکرها برای بخشی از دیتا سِگمنت (Data Segment) استفاده می‌شود که حاوی متغیر های استاتیک اختصاصی که تنها از بیت هایی با ارزش صفر شروع شده است می‌باشد. این بخش به عنوان BSS Section و یا BSS Segment شناخته می‌شود. به طور معمول فقط طول بخش bss نه data در فایل آبجکت ذخیره می‌شود. برای نمونه، یک متغیر به عنوان استاتیک تعریف شده است static int i; این در بخش BSS خواهد بود. حافظه هیپ (Heap) ناحیه هیپ (Heap) به طور رایج در ابتدای بخش‌های .bss و .data قرار گرفته است و به اندازه‌های آدرس بزرگتر قابل رشد است. ناحیه هیپ توسط توابع malloc, calloc, realloc و free مدیریت می‌شود که ممکن است توسط سیستم‌های brk و sbrk جهت تنظیم اندازه مورد استفاده قرار گیرد. ناحیه هیپ توسط تمامی نخ‌ها٬ کتابخانه‌های مشترک و ماژول‌های بارگذاری شده در یک فرآیند به اشتراک گذاشته می‌شود. به طور کلی حافطه Heap بخشی از حافظه کامپیوتر شما است که به صورت خودکار برای شما مدیریت نمی‌شود، و به صورت محکم و مطمئن توسط پردازنده مرکزی مدیریت نمی‌شود. آن بیشتر به عنوان یک ناحیه شناور بسیار بزرگی از حافظه است. برای اختصاص دادن حافظه در ناحیه هیپ شما باید از توابع malloc(), calloc() که توابعی از C هستند استفاده کنید. یکبار که شما حافظه ای را در ناحیه هیپ اختصاص دهید، جهت آزاد سازی آن باید خود مسئول باشید و با استفاده از تابع free() این کار را به صورت دستی جهت آزاد سازی حافظه اختصاص یافته شده انجام دهید. اگر شما در این کار موفق نباشید، برنامه شما در وضعیت نَشت حافظه (Memory Leak) قرار خواهد گرفت. این بدین معنی است که حافظه اختصاص یافته شده در هیپ هنوز خارح از دسترس قرار گرفته و مورد استفاده قرار نخواهد گرفت. این وضعیت همانند گرفتگی رَگ در بدن انسان است و حافظه نشت شده جهت عملیات در دسترس نخواهد بود. خوشبختانه ابزار‌هایی برای کمک کردن به شما در این زمینه موجود هستند که یکی از آن‌ها Valgrind نام دارد و شما می‌توانید در زمان اشکال زدائی از آن جهت تشخیص نواحی نشت دهنده حافظه استفاده کنید. بر خلاف حافظه اِستک (Stack) حافظه هیپ محدودیتی در اندازه متغیر‌ها ندارد (جدا از محدودیت آشکار فیزیکی در کامپیوتر شما). حافظه هیپ در خواندن کمی کُند تر از نوشتن نسبت به حافظه اِستک است، زیرا جهت دسترسی به آن‌ها در حافظه هیپ باید از اشاره گر استفاده شود. بر خلاف حافظه اِستک، متغیر‌هایی که در حافظه هیپ ساخته می‌شوند توسط هر تابعی در هر بخشی از برنامه شما در دسترس بوده و اساسا متغیر‌های تعریف شده در هیپ در دامنه سراسری قرار دارند. حافظه اِستک (Stack) ناحیه اِستک (Stack) شامل برنامه اِستک٬ با ساختار LIFO کوتاه‌ شده عبارت Last In First Out (آخرین ورودی از همه زودتر خارج می‌شود) به طور رایج در بالاترین بخش از حافظه قرار می‌گیرد. یک (اشاره گر پشته) در بالاترین قسمت اِستک قرار می‌گیرد. زمانی که تابعی فراخوانی می‌شود این تابع به همراه تمامی متغیرهای محلی خودش در داخل حافظه اِستک قرار می‌گیرد و با فراخوانی یک تابع جدید تابع جاری بر روی تابع قبلی قرار می‌گیرد و کار به همین صورت درباره دیگر توابع ادامه پیدا می‌کند. مزیت استفاده از حافظه اِستک در ذخیره متغیرها است، چرا که حافظه به صورت خودکار برای شما مدیریت می‌شود. شما نیازی برای اختصاص دادن حافظه به صورت دستی ندارید، یا نیازی به آزاد سازی حافظه ندارید. به طور کلی دلیل آن نیز این است که حافظه اِستک به اندازه کافی توسط پردازنده مرکزی بهینه و سازماندهی می‌شود. بنابراین خواندن و نوشتن در حافظه اِستک بسیار سریع است. کلید درک حافظه اِستک در این است که زمانی که تابع خارج می‌شود، تمامی متغیر‌های موجود در آن همراه با آن خارج و به پایان زندگی خود میرسند. بنابراین متغیر‌های موجود در حافظه اِستک به طور طبیعی به صورت محلی هستند. این مرتبط با مفهوم دامنه متغیر‌ها است که قبلا از آن یاد شده است، یا همان متغیر‌های محلی در مقابل متغیر‌های سراسری. یک اشکال رایج در برنامه نویسی C تلاش برای دسترسی به یک متغیر که در حافظه اِستک برای یک تابع درونی ساخته شده است می‌باشد. یعنی از یک مکان در برنامه شما به خارج از تابع (یعنی زمانی که آن تابع خارج شده باشد) رجوع می‌کند. یکی دیگر از ویژگی‌های حافظه اِستک که بهتر است به یاد داشته باشید این است که٬ محدودیت اندازه (نسبت به نوع سیستم عامل متفاوت) است. این مورد در حافظه هیپ صدق نمی‌کند. خلاصه ای از حافظه اِستک (Stack) حافظه اِستک متناسب با ورود و خروج توابع و متغیر‌های درونی آن‌ها افزایش و کاهش می‌یابد نیازی برای مدیریت دستی حافظه برای شما وجود ندارد٬ حافظه به طور خودکار برای متغیر‌ها اختصاص و در زمان نیاز به صورت خودکر آزاد می‌شود در اِستک اندازه محدود است متغیر‌های اِستک تنها در زمان اجرای تابع ساخته می‌شوند مزایا و معایب حافظه اِستک و هیپ حافظه اِستک (Stack) دسترسی بسیار سریع به متغیر‌ها نیازی برای باز پس گیری حافظه اختصاص یافته شده ندارید فضا در زمان مورد نیاز به اندازه کافی توسط پردازنده مرکزی مدیریت می‌شود، حافظه ای نشت نخواهد کرد متغیر‌ها فقط محلی هستند محدودیت در حافظه اِستک بسته به نوع سیستم عامل متفاوت است متغیر‌ها نمی‌توانند تغییر اندازه دهند حافظه هیپ (Heap) متغیر‌ها به صورت سراسری قابل دسترس هستند محدودیتی در اندازه حافظه وجود ندارد تضمینی برای حافظه مصرفی وجود ندارد، ممکن است حافظه در زمان‌های خاص از برنامه نشت کرده و حافظه اختصاص یافته شده برای استفاده در عملیات دیگر آزاد نخواهد شد شما باید حافظه را مدیریت کنید٬ شما باید مسئولیت آزاد سازی حافظه های اختصاص یافته شده به متغیر‌ها را بر عهده بگیرید اندازه متغیر‌ها می‌تواند توسط تابع realloc() تغییر یابد در اینجا یک برنامه کوتاه وجود دارد که در آن متغیرها در یک حافظه اِستک ایجاد شده اند. #include <stdio.h> double multiplyByTwo (double input) { double twice = input * 2.0; return twice; } int main (int argc, char *argv[]) { int age = 30; double salary = 12345.67; double myList[3] = {1.2, 2.3, 3.4}; printf("double your salary is %.3f\n", multiplyByTwo(salary)); return 0; } ما متغیر‌هایی را اعلان کرده ایم که یک int ، یک double و یک آرایه که سه نوع double دارد هستند. این متغیر‌ها داخل اِستک وارد و به زودی توسط تابع main در زمان اجرا حافظه مورد نیاز خود را دریافت خواهند کرد. زمانی که تابع main خارج می‌شود (برنامه متوقف می‌شود) این متغیر‌ها همگی از داخل حافظه اِستک خارج خواهند شد. به طور مشابه٬ در تابع multiplByTwo() متغیر twice که از نوع double است، داخل اِستک وارد شده و در زمان اجرای تابع multiplyByTwo() حافظه به آن اختصاص می‌یابد. زمانی که تابع فوق خارج شود یعنی به نقطه پایان اجرایی خود برسد، حافظه اختصاص یافته شده به متغیر‌های داخلی آن نیز آزاد خواهند شد. به طور خلاصه توجه داشته باشید که تمامی متغیر‌های محلی در این نوع تعریف تنها در طول زمان اجرایی زمانی تابع زنده هستند. به عنوان یک یادداشت جانبی، روشی برای نگه داری متغیر‌ها در حافظه اِستک وجود دارد، حتی در زمانی که تابع خارج می‌شود. آن روش توسط کلمه کلیدی static ممکن خواهد شد که در زمان اعلان متغیر استفاده می‌شود. متغیری که توسط کلمه کلیدی static تعریف می‌شود، بنابراین چیزی مانند متغیر از نوع سراسری خواهد بود، اما تنها در داخل تابعی که داخل آن ایجاد شده است قابل مشاهده خواهد بود. این یک ساختار عجیب و غریب است، که احتمالا به جز شرایط بسیار خاص نیازی به آن نباشد. نسخه دیگری از برنامه فوق در قالب حافظه هیپ به صورت زیر است: #include <stdio.h> #include <stdlib.h> double *multiplyByTwo (double *input) { double *twice = malloc(sizeof(double)); *twice = *input * 2.0; return twice; } int main (int argc, char *argv[]) { int *age = malloc(sizeof(int)); *age = 30; double *salary = malloc(sizeof(double)); *salary = 12345.67; double *myList = malloc(3 * sizeof(double)); myList[0] = 1.2; myList[1] = 2.3; myList[2] = 3.4; double *twiceSalary = multiplyByTwo(salary); printf("double your salary is %.3f\n", *twiceSalary); free(age); free(salary); free(myList); free(twiceSalary); return 0; } همانطور که می‌بینید، استفاده از malloc() برای تخصیص حافظه در حافظه Heap و استفاده از free() جهت آزاد سازی حافظه تخصیص یافته می‌باشد. این مواجه شدن چیز بسیار بزرگی محسوب نمی‌شود اما کمی مبهم است. چیز دیگری که باید به آن توجه داشته باشید علامت ستاره (*) است که در همه جای کد‌ها دیده می‌شود. اینها چه چیز‌هایی هستند؟ پاسخ این سوال این است : اینها اشاره گر هستند! توابع malloc() و calloc() و free() با اشاره‌گر‌هایی مواجه می‌شوند که مقادیرشان واقعی نیست. اشاره گر‌ها نوع داده ای خاصی در C هستند که آدرس حافظه مربوطه را بر می‌گردانند. در خط ۵ متغیر twice یک متغیر از نوع double نیست، اما اشاره به یک double دارد. آن آدرس حافظه ای است که نوع double در آن بلوک از حافظه ذخیره شده است. در ++C توسط کلمه کلیدی new که خود آن نیز یک اپراتور محسوب می‌شود می‌توان حافظه ای را در Heap اختصاص داد. به عنوان مثال: int* myInt = new int(256); آدرس‌های موجود در حافظه توسط اپراتور new به اشاره‌گر مربوطه پاس داده می‌شود. به مثال زیر توجه کنید٬ متغیر تعریف شده در حافظه اِستک قرار گرفته است: int variable = 256; سوالی که ممکن است افراد کنجکاو از خود بپرسند این است که چه زمانی از Stack و چه زمانی از Heap باید استفاده کنیم؟! خب پاسخ این سوال اینگونه خواهد بود٬ زمانی که شما نیاز به یک بلوک بسیار بزرگی از حافظه دارید٬ که در آن یک ساختار بزرگ یا یک ارایه بزرگی را ذخیره کنید و نیاز داشته باشید که متغیر‌های شما به مدت طولانی در سرتاسر برنامه شما در دسترس باشند در این صورت از حافظه Heap استفاده کنید. در صورتی که شما نیاز به متغیر‌های کوچکی دارید که تنها نیاز است در زمان اجرای تابع در دسترس باشند و قابلیت خواندن و نوشتن سریعتری داشته باشند از نوع حافظه Stack استفاده کنید. فقط فراموش نکنید که حافظه Heap تحت توابع molloc(), realloc(), calloc() و free() مدیریت می‌شوند. هرچند اشاره‌گر های هوشمند نیز در ++C وجود دارند اما در بسیاری از مواقع که نیاز است بسیار جزئی و حساس بر روی کد‌های خود کار کنید از مدیریت حافظه به صورت دستی استفاده کنید.
  23. 1 امتیاز
    خلاصه تعریفی از زبان برنامه نویسی سی پلاس پلاس (C++) این زبان دارای قابلیت‌های انواع داده ایستا، نوشتار آزاد، چندمدلی، معمولاً زبان ترجمه شده با پشتیبانی از برنامه‌نویسی ساخت‌ یافته، برنامه‌نویسی شیءگرا، برنامه‌نویسی جنریک است. C++ به همراه جد خود C از پرطرفدارترین زبان‌های برنامه‌نویسی تجاری هستند بنا بر این در زیر فلسفه ای از این زبان را بیان می کنیم: زبان C++ طراحی شده‌است تا یک زبان عمومی با کنترل نوع ایستا و همانند C قابل حمل و پربازده باشد. زبان C++ طراحی شده‌است تا مستقیماً و بصورت جامع از چندین شیوه برنامه‌نویسی (برنامه‌نویسی ساخت‌یافته، برنامه‌نویسی شی‌گرا، انتزاع داده، و برنامه‌نویسی جنریک) زبان C++ طراحی شده‌ است تا به برنامه‌نویس امکان انتخاب دهد حتی اگر این انتخاب اشتباه باشد. زبان C++ طراحی شده‌ است تا حداکثر تطابق با C وجود داشته باشد و یک انتقال راحت از C را ممکن سازد. زبان C++ از بکاربردن ویژگی‌های خاص که مانع از عمومی شدن است خودداری می‌نماید. زبان C++ از ویژگی‌هایی که بکار برده نمی‌شوند استفاده نمی‌کند. زبان C++ طراحی شده‌است تا بدون یک محیط پیچیده عمل نماید. کتابخانه ها چه چیزی هستند و در این زبان چگونه است؟ به مجموعه‌های یکپارچه‌ای از کلاس‌های پیاده سازی شده (به صورت فایل‌های سرآیند با پیاده سازی‌های کد یا اشیای زبان ماشین) که برای برنامه نویسی به کار می‌روند، یک کتابخانه C++ گفته می‌شود و قدرت اصلی این زبان در امکان به کارگیری کتابخانه‌های آماده می‌باشد برای مثال کتابخانه‌های بزرگ C++ مانند STL ، MFC ، Qt ، wxWidgets ، Boost و … مجموعه قدرتمندی برای تولید برنامه در این زبان ایجاد کرده‌اند. لیستی از این کتابخانه های همراه با توضیحات در لینک زیر آمده است : A list of open source C++ libraries - cppreference.com لیست کامل انواع کامپایلر ها : List of compilers - Wikipedia ویژگی های جدید در ویرایش 11، 14 و ۱۷ چیست؟ زبان C++11 (معروف به C++0x) یک نسخه استاندارد از زبان C++ است که در ۱۲ آگوست ۲۰۱۱ منتشر و توسط ISO جایگزین C++03 شد این نسخه دارای نشان ISO/IEC 14882:2011 می باشد و در تاریخ ۱۸ آگوست ۲۰۱۴ نسخه جدید آن یعنی C++14 منتشر و جایگزین C++11 شد. امکانات اضافه شده به هسته C++ : یکی از وظایف کمیته استاندارد سازی توسعه هسته زبان است.در توسعه فعلی چندین بخش از زبان بهبود یافته ,که شامل چند نخی (multithreading) , پشتیبانی از بنامه نویسی عمومی ,مقدار دهی اولیه یکنواخت و پیشرفت عملکرد می باشد. ویژگی های هسته زبان و تغییرات آن به چهار بخش کلی دسته بندی شداند : 1. پیشرفت در عملکرد زمان اجرا (Run-Time) 2. پیشرفت در عملکرد زمان ساخت (Build-Time) 3. پیشرفت در ویژگی ها (قابلیت استفاده) 4. و قابلیت های جدید ویرایش C++‎‎‎‎‎‎‎‎‎‎‎ 14 بر روی اشکال زدایی و بهبودهای جزیی استاندارد قبلی یعنی C++‎‎‎‎‎‎‎‎‎‎‎11 تمرکز کرده است ؛ این زبان در تاریخ ۱۵ می ۲۰۱۳ منتشر و در ۱۵ آگوست ۲۰۱۴ بعد از رای گیری و انجام تغییراتی جزیی استاندارد این زبان منتشر شد. بدلیل این که عموماً تاریخ انتشار این زبان بطور قابل ملاحظه‌ای دیر هنگام بوده است به C++‎‎‎‎‎‎‎‎‎‎‎14 گاهی C++‎‎‎‎‎‎‎‎‎‎‎1y نیز گفته می‌شود. همانند استاندارد C++‎‎‎‎‎‎‎‎‎‎‎11 که به آن C++‎‎‎‎‎‎‎‎‎‎‎0x گفته می‌شده و قرار بر این بوده که قبل از ۲۰۱۰ منتشر شود (البته تا سال ۲۰۱۱ انتشار به تعویق افتاد). گرچه تمامی کامپایلر ها درحال کاربروی C++‎‎‎‎‎‎‎‎‎‎‎14 هستند اما هنوز تمامی آن ها ازC++‎‎‎‎‎‎‎‎‎‎‎ 14 پشتیبانی نمی‌کنند. در C++‎‎‎‎‎‎‎‎‎‎‎11 و C++‎‎‎‎‎‎‎‎‎‎‎14 توابع جدیدی به هسته اصلی زبان و کتابخانه استاندارد آن اضافه شده است که شامل بسیاری از کتابخانه های C++‎‎‎‎‎‎‎‎‎‎‎TR1 به استسنای کتابخانه ی توابع ریاضی ویژه میباشد. ویژگی‌های اضافه شده کتابخانه در ویرایش ۱۱ std::move std::forward std::to_string type traits smart pointers std::chrono tuples std::tie std::array unordered containers std::make_shared memory model ویژگی‌های اضافه شده به زبان در ویرایش ۱۱ move semantics variadic templates rvalue references initializer lists static assertions auto lambda expressions decltype template aliases nullptr strongly-typed enums attributes constexpr delegating constructors user-defined literals explicit virtual overrides final specifier default functions deleted functions range-based for loops special member functions for move semantics converting constructors explicit conversion functions inline-namespaces non-static data member initializers right angle brackets ویژگی‌های اضافه شده به کتابخانه در ویرایش ۱۴ user-defined literals for standard library types compile-time integer sequences std::make_unique ویژگی‌های اضافه شده به زبان در ویرایش ۱۴ binary literals generic lambda expressions lambda capture initializers return type deduction decltype(auto) relaxing constraints on constexpr functions variable templates ویژکی‌های اضافه شده به کتابخانه در ویرایش ۱۷ std::variant std::optional std::any std::string_view std::invoke std::apply splicing for maps and sets ویژگی‌های اضافه شده به زبان در ویرایش ۱۷ template argument deduction for class templates declaring non-type template parameters with auto folding expressions new rules for auto deduction from braced-init-list constexpr lambda lambda capture this by value inline variables nested namespaces structured bindings selection statements with initializer constexpr if utf-8 character literals direct-list-initialization of enums کتابخانه های استاندارد چیست و در نسخه ی جدید C++‎‎‎‎‎‎‎‎‎‎‎11 چگونه در دسترس هستند؟ در زبان برنامه نویسی C++ کتابخانه استاندارد سی++ مجموعه‌ای از کلاس‌ها و رویه‌ها است که در هسته زبان نوشته شده‌اند و قسمتی از استاندارد ISO سی++ می‌باشند. در سال ۱۹۹۸ استاندارد C++ شامل دو بخش هسته زبان و کتابخانه استاندارد C++ است. این کتابخانه شامل بیشتر بخش‌های STL و کتابخانه استاندارد C است. بیشتر کتابخانه‌های C++ در استاندارد وجود ندارند و یا استفاده از تعریف قابلیت پیوند کتابخانه‌ها را می‌توان در زبان‌هایی مانند فرترن، C، پاسکال، بیسیک نوشته شوند. البته با توجه به ویژگی‌های کامپایلر مشخص خواهد شد که کدام زبان را می‌توان استفاده نمود. کتابخانه استاندارد C++ شامل کتابخانه استاندارد C با یک سری تغییرات برای بهبود عملکرد است. بخش بزرگ بعدی این کتابخانه STL است. STL شامل ابزار بسیار قدرتمندی مانند نگه‌دارنده‌ها (مانند vector و list)، تکرارکننده‌ها (اشاره‌گرهای عمومی شده) برای شبیه‌سازی دسترسی مانند آرایه الگوریتم‌هایی برای جستجو و مرتب‌سازی در آنها وجود دارند. نقشه‌ها (نقشه‌های چندگانه) (آرایه شرکت‌پذیر) و مجموعه‌ها (مجموعه‌های چندگانه) واسط‌های عمومی فراهم می‌سازند. در نتیجه با استفاده از قالب تابع، الگوریتم‌های جنریک با هر نگه‌دارنده و دارای تکرارکننده عمل نماید. همانند C ویژگی‌های کتابخانه را می‌توان با استفاده از شبه دستور include# شامل یک سرآیند استاندارد اضافه نمود. C دارای ۶۹ کتابخانه استاندارد است که ۱۹ تا از آنها نامناسب تشخیص داده شده‌اند. استفاده از کتابخانه استاندارد - مانند std::vector یا std::string به جای آرایه‌های C موجب ایجاد برنامه‌های مطمئن‌ تر شده‌ است. STL در آغاز محصولی جداگانه از HP و سپس SGL پیش از ادغام در کتابخانه استاندارد C++ بوده‌است. استاندارد عبارت STL را بکار نمی‌برد بلکه آن را بخشی از کتابخانه می‌داند اما مردم هنوز هم آن را برای جداسازی بخش‌های مختلف کتابخانه با این نام بکار می‌برند. (جریان‌های ورودی/خروجی، جهانی‌سازی، تشخیص، زیرمجموعه کتابخانه C) بیشتر کامپایلرها کتابخانه استاندارد و STL را پیاده‌سازی می‌نماید. پیاده‌سازی‌های مستقلی نیز همانند STLport نیر وجود دارند. پروژه‌های دیگر نیز پیاده‌سازی‌های خود را از STL با توجه به اهداف خود بوجود می‌آورند. روش جدیدی جناب بیجارن در نظر گرفته که کتابخانه های استاندارد C++ علاوه بر اینکه توسط خود کامپایلر ها در دسترس و قابل استفاده هستش بلکه توسط کتابخانه STL و Boost نیز می توان دسترسی به مجموع عظیمی از کتابخانه ها استاندارد ISO داشت. ساختار فایل ها در این زبان چگونه است؟ در رابطه با ساختار برنامه های نوشته شده توسط C++ بدانید که منظور از ساختار در اینجا انواع فایل های موجود در زبان C++ است، در این رابطه باید اینگونه اشاره کنیم که در این زبان ما می توانیم از فایل های زیر برای برنامه نویسی استفاده کنیم. نکته قابل توجه: زمانی که زبان برنامه نویسی C++ در دوران اول خود قرار داشت بسیاری از سیستم ها قادر به پشتیبانی از انواع فایل سیستم ها نبودند، بنابراین بعدا ها پیشنهاد شد از فایل سیستم هایی با همان قابلیت همراه با ویژگی حمل پذیری در تمامی سیستم ها ایجاد شوند که در ادامه به انواع مختلف آن ها اشاره خواهیم کرد. فایل با پسوند .c این فایل منبعی برای کد هایی از نوع زبان C هستند. فایل با پسوند .c++ منبعی برای کد هایی از نوع زبان C و C++ هستند ضعف این نوع فایل در قابل حمل نبودن و عدم شناسایی توسط فایل سیستم ها می باشد. (منسوخ شده) فایل با پسوند .cxx منبعی برای کد هایی از نوع زبان C و C++‎‎‎‎‎‎‎‎‎‎‎ هستند با تفاوت اینکه نسبت به فایل .c++ قابل حمل تر است. (منسوخ شده) فایل با پسوند .cpp منبعی برای کد هایی از نوع زبان C و C++ هستند یعنی در هر دو نیز قابل استفاده می باشند. این پسوند با تمامی سیستم ها سازگاری دارد و بسیار رایج است. (پشنهاد شده) فایل با پسوند .hxx معمولا فایل با عنوان (هدر/سرصفحه) یاد می شوند و معمولا فقط حاوی اعلان ها می‌باشند. (منسوخ شده) فایل با پسوند .hpp معمولا فایل با عنوان (هدر/سرصفحه) یاد می شوند و معمولا فقط حاوی اعلان ها می‌باشند. این فرمت توسط مارس دیجیتال استفاده می شود. همچنین بورلند و دیگر کامپایلر های سی++ از آن پشتیبانی می‌کنند. ممکن است در این فایل متغیر ها، ثوابت و توایعی که در فایل سورس اصلی به آن ها اشاره شده است اعلام شود. فایل با پسوند .h معمولا فایل با عنوان (هدر / سر صفحه) یاد می‌شوند و معمولا فقط حاوی اعلان ها می‌باشند این نوع بسیار رایج است و تقریبا با تمامی سیستم ها سازگاری دارد. (پشنهاد شده) فایل با پسوند .hh در این زبان : فایل با عنوان (هدر / سر صفحه) یاد می شوند و معمولا فقط حاوی اعلان ها می‌باشند. فایل با پسوند .h++ در این زبان : این نوع فایل ها معمولا فایل با عنوان (هدر/ سرصفحه) یاد می شوند و معمولاً فقط حاوی اعلان ها میباشند. ضعف این نوع فایل در قابل حمل نبودن و عدم شناسایی توسط فایل سیستم ها می‌باشد. (منسوخ شده) نکته : معمولا روش استفاده از این فایل ها به صورت جفت می باشد. برای مثال استفاده از فایل هدر .h++ همراه با سورس .c++ فراهم می شود. فایل .cxx همراه با .hh و فایل های .cpp و .hpp و در نهایت فایل .c و .h باهم دیگر مورد استفاده قرار می‌گیرند. اما در این میان استاندارد ترین و پر کاربرد ترین آن ها که از لحاظ قابل حمل بودن هم از طرف کمیته استاندارد سازی ISOCPP قابل تایید هستند فایل های .cpp و .c و یا .h و .hpp هستند که در بین این دو رایجترین آن ها .h و .cpp می‌باشند. یک فایل هدر با پسوند (.h, .hpp و ...) می‌تواند شامل محتوای زیر باشد: تعریف کلاس تعریف توابع درون خطی (Inline) اعلام تابع اعلام شیء مثال: #ifndef CPPFILES_H #define CPPFILES_H extern int status; class CPPFiles { public: CPPFiles(); void myFunction(); inline int safe(int i); }; #endif // CPPFILES_H یک فایل منبع - سورس با پسوند (.c, .hpp، .cxx و ...) می‌تواند شامل محتوای زیر باشد: تعریف کلاس تعریف توابع اعلام شیء مثال : #include "cppfiles.h" int status = 1; CPPFiles::CPPFiles() { } void CPPFiles::myFunction() { //Do somthing... } int CPPFiles::safe(/*@Param*/) { return /*Somthing...*/; } انواع فایل هایی که به آنها اشاره شد بسیار است ولی متناسب با محبویت و پشتیبانی کامپایلر ها از این فایل ها در این زبان برای انتخاب آنها مهم است بنا بر این در طی آموزش و تمامی مراحل ما فقط از فایل های .h برای هدر و فایل های .cpp برای منابع استفاده خواهیم کرد. چرا و چه زمانی باید از فایل های h. و چه زمانی از فایل های cpp. استفاده کنیم؟ در پاسخ باید اینگونه اشاره کنیم که در زبان C++ برای راحتی کار به خاطر پیچیده بودن کد نویسی امکان این وجود دارد که ما توابع ، کلاس ها و تعاریف رو در فایل جدا گانه ای مثل هدر فایل یا همان .h بنویسیم و برای اجرا عملیات و صدا زدن از فایل های .cpp استفاده کنیم البته این اجبار نیست ! شما می توانید در فایل .h و یا فایل .cpp به تنهایی برنامه رو اجرا کنید که معمولا در مثال های کوچک و کوتاه از یک نوع فایل استفاده می شود ولی بسته به نیاز و پیچیدپی در پروژه بهتر است استفاده از امکاناتی که این زبان در اختیار ما می گذارد به حد اکثر برسانیم. کاربرد این زبان در کجاست؟ معمولا تمامی برنامه ها و نرم افزار هایی که به صورت روزمره در زندگی مدرن امروزی مشاهده میکنیم بدون شک توسط زبان های مادر نوشته شده اند به عنوان مثال انواع صنعت در کشور ها از قبیل صنعت خودرو سازی، صنعت فضایی، سیستم های معماری و بانکی ، تجهیزات مدرت و سخت افزار های رباتیک در انواع صنایع ، سیستم های کامپیوتری و یا کنسول های بازی ، سیستم های خانگی و یا سیستم های رباتیک و هوش مصنوعی ، تجهیزات مجهز به انواع حسگر ها و هوش مصنوعی در علم پزشکی ، صنعت بازی سازی، نرم افزار های مهندسی و همچنین سیستم عامل ها و بسیاری از موارد دیگری که میتوان نام برد بدون شک توسط این زبان پیاده سازی شده اند. چگونه C++ می‌تواند در لایه های زیرین و بالا مورد استفاده قرار بگیرد؟ پاسخ این سوال بسیار واضح است، زیرا این زبان به عنوان سطح بالا اما با قابلیت مانور در سطوح پایین نیز مورد استفاده قرار بگیرد. به عنوان مثال حتی می‌توان توسط آن کد های اسمبلی نوشت و دستورات C که معمولا در لایه های زیرین به صورت سیستمی از آن ها میتوان استفاده کرد. آیا سیستم عامل ها و نرم افزار های مطرح دنیا توسط این زبان نوشته شده اند؟ دلیل آن چیست؟ همانگونه که مشخص است بسیاری از سیستم عامل ها از ابتدا توسط خانواده اسمبل ، C نوشته شده اند که به صورت زیر به تعدادی از آن ها اشاره می‌کنیم : DragonFlyBSD,FreeBSD,OpenBSD,NetBSD HP-UX Centos,Debian,Fedora,OpenSUSE,RedHat,Ubuntu OSX,iOS,Darwin OracleSolaris,OpenIndiana Cygwin Android Windows Phone BlackBerry WindowsXP,Vista,7,8,10 دلیل آن که از زبان هایی مانند C/C++ رای نوشتن سیستم عامل استفاده میشود قابلیت های مهم آن است به عنوان مثال : پرفرمنس بالا ، مستقل از سکو ، زبان مادر بودن و عدم وابستگی آن به زبان های دیگر، ارتباط با سخت افزار و تمامی دیوایس ها، مدیریت هوشمندانه و همچنین آزادانه برنامه نویسی کردن، دسترسی به لیست عظیمی از کتابخانه ها که می‌توان توسط آن ها هر چیزی را در این زمینه خلق کرد. انواع سخت افزار هایی که این زبان پشتیبانی می‌کند : مدل ماشین هایی که پشتیبانی می‌شود : PowerPC , Oracle,Fujitsu,Sun, IBM,Freescale , AMD,Intel مدل پردازنده ها : Athlon,Atom,Core,Core2,Corei3/i5/i7,Opteron,Pentium,Phenom,Sempron,Turion,etc Itanium,Itanium2,Itanium29000/9100/9300,etc PowerPC,POWER1/2/3/4/5/6/7,G1,G2,G3,G4,G5,etc UltraSPARCI/II/III/IV/T1/T2,SPARCT3/T4,etc با پشتیبانی از این نوع پردازنده ها قابلیت آن را به برنامه نویس میدهد تا بر روی وسعت بسیار زیادی از سیستم های مجهز به پردازنده ها برنامه نویسی کند این امر همان دلیلی است که انواع سیستم عامل ها بر روی سخت افزار های معرفی شده میتوانند اجرا شوند زیرا که برنامه نویسی با چنین زبانی قابلیت های ذکر شده را فراهم خواهد کرد. در صنعت بازی سازی و همچنین نرم افزار های مهندسی جهت طراحی و ساخت انواع بازی ها و یا طرح های بزرگ مهندسی و علمی از این زبان استفاده میشود که میتوان به وضوح برخی از آن ها را که توسط بزرگترین و مدرن ترین شرکت ها فراهم شده است نام برد... کنسول های بازی مانند PlayStation که همینک نسخه 4 آن در بازار موجود است دارای پردازنده ای بر پایه Power PC میباشد با سخت افزار بسیار قدرتمند توسط سیستم عاملی بی نقص بر پایه FreeBSD توسط C/C++ توسعه داده شده است. و در رابطه با دیگر کنسول هایی مانند Xbox One نیز همچنین میتوان ذکر کرد که این دو مورد مطرح ترین و داغترین بازار کنسول های بازی را در صنعت بازی همراه با پلتفرم PC دارند. بنابراین صنعت بازی سازی و هوش مصنوعی تماما بر پایه قدرتمندترین زبان توسعه می یابد چرا که استفاده از موتور های گرافیکی مانند Unreal Engine و یا سیستم های پردازشی 3 بعدی مانند OpenGL و Direct X توسط این زبان توسعه داده می‌شوند تا بازی سازان بستری را فراهم نمایند تا دنیای پیش روی بازی کننده را به واقعیت نزدیکتر نمایند. همچنین در رابطه با این صنعت میتوان به صنعت نرم افزار های مهندسی و سخت افزار های مناسب ذکر کرد مانند محصولات Autodesk که نرم افزار های قدرتمندی چون Autocad , 3dsmax و .. را برای صنعت مهندسی فراهم نموده اند و سخت افزار های قدرتمندی مانند محصولات NVIDIA و AMD ATI نیز کتابخانه های توسعه را برای زبان C/C++ منتشر کرده اند و حتی میتوان به Intel اشاره نمود که برای توسعه سیستم نرم افزاری در محصولات آن زبان C/C++ را پیشنهاد نموده و کتابخانه های لازم را فراهم کرده اند که حال در نظر بگیریم چنین سخت افزار ها در سازمان های بسیار کاربردی مانند NASA قابل استفاده است که حجم عظیمی از اطلاعات را پردازش میکنند. کاربرد این زبان در زمینه وب چگونه است ؟ در زمینه وب خود C++ به صورت مستقیم وارد طراحی صفحات وب نمی‌شود لذا که هدف از آن طراحی وب نیست البته لازم بذکر است کتابخانه های زیادی برای این کار موجود است ولی در لایه های کمی پایینتر استفاده از این زبان امریست طبیعی برای مثال وب سایت های بسیار بزرگی مانند Google , Facebook و غیره وجود دارد که هسته آن را توسط این زبان پیاده سازی نموده اند تا در لایه های بالاتر عملیات پردازش در حد پاس کردن به لایه زیرین و پردازش توسط C++ صورت بگیرد تا سرعت انتقال اطلاعات به صورت بسیار چشمگیری افزایش می یابد که میتوان به برخی از آن ها اشاره کرد که در نهایت منجر به مدیریت منابع و کاهش فشار سرور میشود. وب سایت Facebook را در نظر بگیرید چندی پیش بود که به دلیل افزایش کاربران و حجم اطلاعات آن فشاری که بر روی سرور های این شرکت آمده بود بسیار بالا بود و برای بهبودی آن نیازمند هزینه و افزایش تجهیزات سخت افزاری داشت که با نوشتن کامپایلری برای PHP توسط C++ توانست این مشکل را برطرف نماید و نیازی برای افزایش سخت افزار و هزینه های کلان برای به روز رسانی سرور ها نشد دلیل استفاده و بهینه سازی توسط C++ بود که نام آن HipHop میباشد. در رابطه با دیگر سیستم های وب سایت نیز میتوان اینگونه اشاره کرد که در لایه های زیرین استفاده های بسیاری از این زبان میشود به عنوان مثال کتابخانه های قدرتمندی از طرف Google با نام V8 ارائه داده شده است. سوال: من تاکنون در محیط کنسول با C++ برنامه نویسی کرده ام چگونه می‌توان برنامه های گرافیکی دارای رابط کاربری مدرن طراحی کرد ؟ روش استفاده و پیشنهادات چیست ؟ متاسفانه امروزه در کشور ما به دلیل عدم به روز بودن نظام آموزشی در رشته کامپیوتری و شاخه برنامه نویسی دانشجویان و برنامه نویسانی که فارغ التحصیل میشوند معمولا با زبان های C++ در حد محیط های Console و محیط توسعه TurboC و یا IDE معروف Visual Studio آشنا هستندکه متاسفانه باید به این نکته اشاره کنیم هیچ یک از نرم افزار های قدرتمند و سیتسم هایی که در موارد بالا ذکر شده در این محیط ها طراحی و توسعه داده نشده اند. این زبان آزادانه برنامه نویسی کردن را برای برنامه نویس فراهم میکند ولی متاسفانه شرکت هایی که توسط IDE های خود سیاست های محدود کننده خود را با نام کتابخانه برای C++ تزریق میکنند باعث گمراهی توسعه دهندگان و عدم شناخت صحیح از این زبان شده اند که در زیر به آن ها اشاره خواهیم کرد. اگر دقت کنیم در محیط های توسعه Visual Studio پروژه هایی که برای C++ در نظر گرفته شده است تحت کتابخانه های MS میباشد که تماما از API های مختص ویندوز در آن ها استفاده میشود و برنامه نویس هر چیزی را که خلق کند در انحصار مایکروسافت و سیستم عامل Windows منتشر کرده است! ولی هدف این زبان این نیست! هدف این است که به صورت ازادانه و بدون محدودیت باید برنامه نویسی کرد بنابراین مقدمات و همچنین کتابخانه های بسیار زیادی که به صورت استاندارد معرفی شده اند برای این زبان وجود دارد که می‌توانید در هر بستر سخت افزاری با هر نوع سیستم عاملی از آن استفاده کنید. حال چگونه باید طراحی رابط کاربری را انجام دهیم؟ برای طراحی رابط گرافیکی ابتدا باید ذهن خود را از محیط VS و همچنین کنسول کنار بکشید لذا برای این کار کتابخانه های مخصوصی در نظر گرفته شده است به صورت زیر : FLTK nana WxWidgets OWLNext GTK+ glibmm gtkmm goocanvasmm libglademm libgnomecanvasmm webkitgtk flowcanvas evince Qt libdbusmenu-qt توسط این کتابخانه های می توان محیط های کاربری را فراهم نمود که در این میان دو کتابخانه wXwidgets و Qt بسیار قدرتمند عمل کرده اند که بین این دو نیز Qt با قدرت بسیار زیادی از رقیب خود یعنی wXwdidget پیشی گرفته است و معمولا پروژه هایی که در آن رابط کاربری خلاقانه (Creative) و مدرن مطرح است حرف از Qt به میان خواهد آمد. در رابطه با آموزش برای کتابخانه wxWidgets به این لینک مراجعه نمایید | همچنین در رابطه با آموزش های مربوط به Qt به این لینک مراجعه نمایید. دانش کافی برای کار با این زبان چیست ؟ توجه داشته باشید این زبان بر خلاف زبان های دیگر لازمه دانش وسیعتری در رابطه با سخت افزار ، شبکه ، سیستم عامل و دیگر موارد را دارد لذا در این زبان برنامه نویس خود باید اطلاعات کافی در رابطه با اصول مهندسی و استاندارد نوسی را داشته باشد بنا براین اگر علاقه مندان و تازه کارانی که از رشته های غیر مرتبط با مهندسی کامپیوتر و مخصوصا نرم افزار وارد آن میشوند نباید انتظار حرفه ای شدن و اصولی برنامه نویسی کردن را داشته باشند مگر اینکه دوره هایی مخصوص در رابطه با این موارد را پشت سر بگذارند لذا تجربه ای حرفه ای در کار با این زبان یکی از اصول استاندارد نویسی و موفقیت در این زبان است. پیشنهادات ما استفاده از مقالات خارجی و منابع رسمی میباشد که رسمی ترین آن ها: http://en.cppreference.com/w/ و http://www.cplusplus.com خواهند بود. لینک ها و منابع بسیار زیادی هستند که اساتید و کاربران حرفه ای میتوانند به آن ها در این تاپیک اشاره نمایند. بازار کار این زبان در ایران چگونه است ؟ متاسفانه راحتی کار با زبان های دیگری که در ایران مطرح است به قدری این زبان را کم رنگ و غیر قابل استفاده نموده که هر برنامه نویسی که در زبان های غیر مرتبط با C++ فعالیت می‌کند چنین میپندارد که بازار کار این زبان مخصوصا در کشور ما مرده است ! و این زبان به طور کلی منسوخ گردیده است که در واقع چنین نیست این از نظر و دیدگاه برنامه نویسانی است که هیچ شناختی در رابطه با این زبان را ندارند ، بنابراین توصیه ما تحقیق این زبان برای پی بردن به ویژگی های آن خواهد بود. به طور کلی اگر برنامه‌نویس حرفه‌ای این زبان باشید همه جا برای شما کار موجود است ! پروژه های صنعتی تا پروژه های ریز و درشته کوچک... بانک ها، صنایع خودرو سازی، صنایع پزشکی، رباتیک، علمی و تحقیقاتی و مواردی که می‌توان مثال زد. معمولاً در ایران پیش به سوی تولید نرم افزار های حسابداری و چنین موارد میروند به صورت خودمانی مثالی میزنم اگر فکر می‌کنید کار با بانک اطلاعاتی سخت است و هیچ نررم افزار حسابداری یا مشابه با این زبان نوشته نمی‌شود دلیل آن بی حوصله بودن برنامه نویس و یا عدم شناخت برنامه نویس از وجود کتابخانه های مربوط به این زبان استب برای مثال بر اساس تجربه ذکر می‌کنم کار با دیتابیس تحت کتابخانه های MySQL و دیگر درایو های دیتابیس بسیار شیرین و آسان است دسترسی به منابع سخت افزاری و همچنین مدیریت و گزارش گیری و سازگاری برنامه های تولید شده تحت این زبان بسیار دل انگیز است. در نهایت در رابطه با ارزش و هزینه برنامه های تولید شده توسط این زبان را باید بگوییم ارزش آن بسیار بالاتر از برنامه های نوشته شده توسط زبان های دیگر خواهد بود لذا قابلیت هایی را که می‌توان فراهم کرد با ویژگی های خاصی که خواهد داشت قیمت نهایی پروژه را میتواند بر اساس سلیقه برنامه نویس یا توسعه دهنده افزایش دهد. اشاره ای بر انواع موتور های دیتابیس که توسط C++ پشتیبانی می‌شوند : SQL SQLite MySQL Sybase Adaptive Server SQL Server Oracle PostgreSQL IBASE : Borland IBM DB2 آیا با C++ می‌توان برنامه های موبایلی مانند Android , iOS و غیره را تولید کرد ؟ همانطور که می‌دانید امروزه صنعت توسعه نرم افزار در بازار کار تبلت و موبایل بسیار پیشرفت کرده و با سرعت بالایی رو به پیشرفت است بنا براین در این میان فناوری Cross Platform بودن نیز مطرح است. اگر نیاز است برنامه ای را تولید کنیم که در Android قابل اجرا باشد می‌بایست توسط زبان هایی مانند Java آن را توسعه دهیم و یا اگر نیاز است برای iOS برنامه ای را منتشر کنیم نیاز است با زبان Objective-C آشنا باشیم و همچنین محیط Xcode که مختص بستر های Apple است و شما بدون داشتن سیستم Apple تحت سیستم عامل مک نخواهید توانست این ایده را پیاده سازی نمایید، یا برای طراحی و ساخت برنامه های blackberry نیز باید با C++ آشنا باشید و در رابطه با دیگر موارد مانند Windows Phone همچنین است که یاد گیری تمامی این موارد برای خود زحماتی را خواهد داشت بنابراین برای خلاصی از این همه پیچ و خم تنها کافیست با C++ آشنا باشید که توسط کتابخانه های قدرتمندی مانند Qt می‌توانید برنامه خود را برای تمامی این پلتفرم ها منتشر نمایید که باید چنین ذکر کنیم که توسط C++ چیزی در دنیای برنامه نویسی غیر ممکن نیست. حال چگونه توسط C++ می‌توان همه این موارد را فراهم کرد؟ آیا قرار است برای هر کدام مجددا برنامه نویسی و طراحی شود؟ آیا قابلیت هایی که محیط های مخصوص آن دارند را توسط C++ می‌توان فراهم کرد ؟ پاسخ این سوال اینگونه خواهد بود ، زبان C++ یک زبان خود مختار و مادر است بنا براین چرا که نه ؟! به راحتی و با انتخاب کتابخانه مورد نظر خود می‌توانید اقدام به طراحی و تولید برنامه های Cross Platform کنید برای مثال شما می‌توانید با انتخای یکی از کتابخانه های طراحی مانند Qt اقدام به طراحی و کد نویسی نموده و کافی است با کامپایل برنامه نوشته شده در سیتم عامل های مربوطه آن ها را منتشر نمایید. هیچ نیازی نخواهد بود برای هر سیستم عامل مجددا کد نویسی و طراحی کنید لذا یک بار کد نویسی کافی است و زمان بسیار زیادی برای تمرکز بر روی مواردی همچون رفع باگ و توسعه برنامه شما در تمامی محیط ها به صورت یکباره خواهد بود. پیشنهاد ما در رابطه نحوه شروع برای یادگیری و آشنایی با زبان و انواع کتابخانه ها به صورت زیر است: قبل از هر چیز هدف خود را در رابطه با منابع مشخص نمایید، اگر زبان انگلیسی شما خوب است می‌توانید در همین قدم اول از منابع رسمی و استاندارد که بی نقص هستند استفاده کنید. سعی کنید اگر قرار است این زبان را یاد بگیرید عملا با آن درگیر شوید. از مقدمات برنامه نویسی شروع کنید و حتما در رابطه با تاریخچه زبان و اهداف آن تحقیق کنید. شرکت و سازمان های بزرگ و موفق را الگو قرار دهید. اگر هدف شما سریع رسیدن به پول بدون در نظر داشتن کیفیت و اهداف بزرگ از پروژه هستش به هیچ عنوان سراغ این زبان نروید زیرا C++‎‎‎‎‎‎‎‎‎‎‎ برنامه نویس حرفه ای را میطلبد نه برنام نویس راحت طلب. برای برنامه نویسی بهتر C++ نسخه های C++‎‎‎‎‎‎‎‎‎‎‎11 و 14 آن را بیاموزید. برای استفاده و کار با کتابخانه های این زبان بهتر است کتابخانه های داخلی مانند STL را بیاموزیم چرا که کتابخانه های پیشفرض آن مهم است. در رابطه با کتابخانه های عمومی Boost,Qt,STL مناسبترین گزینه میباشند. برای توسعه هرچه بیشتر پروژه و استفاده از انواع قابلیت ها توسط این زبان میبایست از کتابخانه های دیگر استفاده کنیم که در این میان در رابطه با بخش طراحی و رابط کاربریQt، GTK, MFC, SDL , wxWiddgets مناسب است که پیشنهاد ما در میان این لیست (Qt) خواهد بود که تحت آن میتوان مدرنترین طراحی ها را خلق نمود. برای کار با شبکه کتابخانه های Poco, Qt, RakNet, ReplicaNet, SDL موجود هستند و در بین اینها Poco بهترین گزینه میتواند باشد. برای کار با 3D بعدی کتابخانه مخصوص OpenGL یا باز همان Qt را که بر پایه موتور OpenGL است پیشنهاد میکنیم و یا می‌توانید از کتابخانه های مخصوص DirectX و OpenGL به صورت تخصصی استفاده کنید. در رابطه با 2D نیز از OpenGL، Direct2D, GDI و GDI+ میتوان استفاده کرد. در مورد Sound از کتابخانه های مطرح OpenAL, Fmod و Bass استفاده کنید. در مورد بحث فیزیک کتابخانه های Nvidia Physix, Nvidia Apex, Bullet, Box2D, ODE, Open Dynamics در رابطه با هوش مصنوعی کتابخانه های OpenAI, FEAR, OpenSteer, PathLib مطرح هستند. برای کار با پردازش تصویری OpenCV, OpenNI پیشنهاد میشود. برای کار با پردازش موازی OpenCL, OpenML, CUDA مناسب است. برای اسکریپت نویسی Lua, LuaPlus, Phyton برای کار با ورودی ها از OpenInput, Qt, SDL, SFML می‌توان استفاده کرد. برای بازی سازی کتابخانه های Unreal Engine, OGRE, Irrlicht, KGE مناسب هستند که در بین اینها Unreal Engine بسیار قدرتمند عمل می‌کند. برای طراحی و اجرای وب سایت کتابخانه های WebKit, ClearSilver, Teng مناسب هستند. لازم بذکر است این ها نمونه کتابخانه هایی هستند که برنامه نویس بر اساس سلیقه و ویژگی های موجود در کتابخانه می‌تواند انتخاب و از آن استفاده نماید و همچنین به این نکته اشاره کنیم معمولا کتالبخانه های عمومی برای اجرای پروژه های معمولی پاسخگو هستند برای مثال با انتخاب Qt می‌توانید یک نرم افزار خوب را با تمام قابلیت ها تولید کنید. و هزاران کتابخانه برای اهداف خاص که توسط اشخاص ، شرکت ها و سازمان های مختلف ارائه می‌شوند.
  24. 0 امتیاز
    شرایط کسب مجوز فعالیتی و ارتقا حساب‌کاربری نسخه‌ی ۱.۰.۰ همانطور که می‌دانید مرجع آی او استریم در ابتدا ثبت‌نام دارای گروه‌های کاربری مشخصی می‌باشد که ثبت‌نام کننده خود انتخاب می‌کند که عضو کدام گروه باشد. اما بعضی از گروه‌های کاربری موجود که در لیست زمان ثبت‌نامی موجود نیستند شامل مدیران سایت، میانجی‌گر‌ها و فول‌اِستَک‌ها هستند که دارای مجوز‌های بیشتری نسبت به دیگر گروه‌های کاربری می‌باشند که توسط اساتید تایید می‌شوند. بنابراین برای کسب مجوز این نوع گروه‌های کاربری نیاز بر این است ابتدا اسناد قوانین و قالب اصول نگارشی در مرجع آی او استریم، سند نحوه‌ی پرسش و پاسخ هوشمندانه و حریم خصوصی را مطالعه و بپذیرید. ما بر این باوریم که باهم به صورت کار تیمی می‌توانیم مرجعی پُر بار و مفید برای جامعه‌ی برنامه‌نویسی کشورمان فراهم کنیم. گروه‌های کاربری در مرجع آی او استریم به صورت زیر می‌باشند: بنیان‌گذاران مدیران کل سایت میانجی‌گر‌ها اساتید توسعه‌دهنده بَک‌اِند توسعه‌دهنده فرانت‌اِند توسعه‌دهنده فول‌اِستک طراحان مترجمین منتور‌ها و مشاورین برخی از مجوز‌های ویژه این گروه‌ها در مدیریت کاربری، مطالب و گروه‌ها گروه‌های کاربری عادی، توسعه‌دهنده بَک‌اِند و فرانت اِند، طراحان، مترجمین توانایی دسترسی به سایت توانایی تغییر نام کاربری بعد از پذیرفته شدن حداقل ۱۰ مطلب، نظرسنجی و دیدگاه‌ها نمایش در لیست آخرین کاربران و اطلاعات آنلاین توانایی ارسال تصویر کاور توانایی استفاده از انیمیشن‌های متحرک بر روی آواتار اجازه‌ی نمایش کاربران و مطالب مرتبط به آن در نتایج جستجو توانایی نمایش تاریخچه‌ی نام نمایشی توانایی دسترسی به سایت در هنگام آفلاین بودن توانایی ایجاد نظرسنجی توانایی رای دادن در نظر‌سنجی‌ها توانایی بستن نظر‌سنجی خود توانایی استفاده از برچسب‌ها توانایی استفاده از پیشوند‌ها گفتگو‌های مجاز برای ارسال در هر هفته (25 عدد) گفتگوهای مجاز برای آغاز در هر دقیقه (۱) حداکثر دریافت کننده در هر گفتگو (10) امکان استفاده از امضاء توانایی بارگذاری فایل نمایش پاسخ‌های برجسته (نمایش پاسخ‌های این گروه در ویژگی و رنگ خاص) توانایی ارسال امتیاز به مطالب توانایی تغییر امتیاز به مطالب توانایی ویرایش مطالب خود در ماژول‌های زیر گفتگو‌های خصوصی به‌روز‌رسانی وضعیت مطالب وبلاگ‌ها موضوعات انجمن‌ها تصاویر آلبوم‌ها رویداد‌ها مقالات صفحه‌هات استاتیک فایل‌ها (مرکز دانلود) محدودیت ویرایش زمانی مطالب (120 دقیقه بعد از ارسال) توانایی ویرایش مطالب به صورت مخفی (به طور عادی اگر مطلبی ویرایش گردد در زیر آن عبارت ویرایش شده قرار می گیرد. اگر فعال شود، کاربران این گروه قادر خواهند بود این پیام را مخفی نمایند. مدیران تالاری که دسترسی مربوطه را دارند همیشه قادر به مشاهده این پیام هستند.) توانایی مخفی سازی مطالب خود توانایی حذف مطالب خود توانایی قفل یا باز کردن مطالب خود محدودیت ارسال مطلب، دیدگاه و نظرسنجی ۱۰ عدد در روز توانایی گزارش مطالب امکان بازنشر در شبکه‌های اجتماعی نیاز مطالب ارسالی به تایید توسط مدیران توانایی بارگذاری فایل در پیام‌های خصوصی و چت توانایی نشان دادن افراد واکنش نشان داده شده امکان ایجاد بلاگ امکان ارسال نظر در پست‌های بلاگ توانایی ایجاد گالری توانایی ایجاد آلبوم توانایی ارسال ویدیو امکان ایجاد پُست به عنوان اسناد معتبر (ویژه، مهم) مدیریت تاپیک‌ها برای عمل‌های ایجاد، حذف، قفل کردن، باز کردن، ویرایش و انتقال مدیریت کاربران (اخطار، رسیدگی به شکایت و بررسی صف‌های پذیرش) ایجاد مقاله در بخش مقالات و یا وبلاگ تخصصی به صورت (مشارکت گروهی) توانایی مشاهده‌ی دریافت کنندگان فایل توانایی مشاهده‌ی پذیرنده‌های فایل توانایی مدیریت نسخه‌ها توانایی فروش و کسب پورسانت از فایل‌ها در بخش مرکز دانلود و فروشگاه توانایی ارسال چند فایل به صورت همزمان گروه‌های کاربری فول‌اِستک، اساتید، منتور و مشاورین توانایی دسترسی به سایت توانایی تغییر نام کاربری بدون محدودیت نمایش در لیست آخرین کاربران و اطلاعات آنلاین توانایی ارسال تصویر کاور توانایی استفاده از انیمیشن‌های متحرک بر روی آواتار اجازه‌ی نمایش کاربران و مطالب مرتبط به آن در نتایج جستجو توانایی نمایش تاریخچه‌ی نام نمایشی توانایی دسترسی به سایت در هنگام آفلاین بودن توانایی ایجاد نظرسنجی توانایی رای دادن در نظر‌سنجی‌ها توانایی بستن نظر‌سنجی خود توانایی استفاده از برچسب‌ها توانایی استفاده از پیشوند‌ها گفتگو‌های مجاز برای ارسال در هر هفته (100 عدد) گفتگوهای مجاز برای آغاز در هر دقیقه (10) حداکثر دریافت کننده در هر گفتگو (30) امکان استفاده از امضاء توانایی بارگذاری فایل نمایش پاسخ‌های برجسته (نمایش پاسخ‌های این گروه در ویژگی و رنگ خاص) توانایی ارسال امتیاز به مطالب توانایی تغییر امتیاز به مطالب توانایی ویرایش مطالب خود در ماژول‌های زیر گفتگو‌های خصوصی به‌روز‌رسانی وضعیت مطالب وبلاگ‌ها موضوعات انجمن‌ها تصاویر آلبوم‌ها رویداد‌ها مقالات صفحه‌هات استاتیک فایل‌ها (مرکز دانلود) محدودیت ویرایش زمانی مطالب (120 دقیقه بعد از ارسال) توانایی ویرایش مطالب به صورت مخفی (به طور عادی اگر مطلبی ویرایش گردد در زیر آن عبارت ویرایش شده قرار می گیرد. اگر فعال شود، کاربران این گروه قادر خواهند بود این پیام را مخفی نمایند. مدیران تالاری که دسترسی مربوطه را دارند همیشه قادر به مشاهده این پیام هستند.) توانایی مخفی سازی مطالب خود توانایی حذف مطالب خود توانایی قفل یا باز کردن مطالب خود محدودیت ارسال مطلب، دیدگاه و نظرسنجی 30 عدد در روز توانایی گزارش مطالب امکان بازنشر در شبکه‌های اجتماعی نیاز مطالب ارسالی به تایید توسط مدیران توانایی بارگذاری فایل در پیام‌های خصوصی و چت توانایی نشان دادن افراد واکنش نشان داده شده امکان ایجاد بلاگ امکان ارسال نظر در پست‌های بلاگ توانایی ایجاد گالری توانایی ایجاد آلبوم توانایی ارسال ویدیو امکان ایجاد پُست به عنوان اسناد معتبر (ویژه، مهم) مدیریت تاپیک‌ها برای عمل‌های ایجاد، حذف، قفل کردن، باز کردن، ویرایش و انتقال مدیریت کاربران (اخطار، رسیدگی به شکایت و بررسی صف‌های پذیرش) ایجاد مقاله در بخش مقالات و یا وبلاگ تخصصی به صورت (مشارکت گروهی) توانایی مشاهده‌ی دریافت کنندگان فایل توانایی مشاهده‌ی پذیرنده‌های فایل توانایی مدیریت نسخه‌ها توانایی فروش و کسب پورسانت از فایل‌ها در بخش مرکز دانلود و فروشگاه توانایی ارسال چند فایل به صورت همزمان گروه‌های کاربری میانجی‌گر‌ها توانایی دسترسی به سایت توانایی تغییر نام کاربری بدون محدودیت نمایش در لیست آخرین کاربران و اطلاعات آنلاین توانایی ارسال تصویر کاور توانایی استفاده از انیمیشن‌های متحرک بر روی آواتار اجازه‌ی نمایش کاربران و مطالب مرتبط به آن در نتایج جستجو توانایی نمایش تاریخچه‌ی نام نمایشی توانایی دسترسی به سایت در هنگام آفلاین بودن توانایی ایجاد نظرسنجی توانایی رای دادن در نظر‌سنجی‌ها توانایی بستن نظر‌سنجی خود توانایی استفاده از برچسب‌ها توانایی استفاده از پیشوند‌ها گفتگو‌های مجاز برای ارسال در هر هفته (100 عدد) گفتگوهای مجاز برای آغاز در هر دقیقه (10) حداکثر دریافت کننده در هر گفتگو (30) امکان استفاده از امضاء توانایی بارگذاری فایل نمایش پاسخ‌های برجسته (نمایش پاسخ‌های این گروه در ویژگی و رنگ خاص) توانایی ارسال امتیاز به مطالب توانایی تغییر امتیاز به مطالب توانایی ویرایش مطالب خود در ماژول‌های زیر گفتگو‌های خصوصی به‌روز‌رسانی وضعیت مطالب وبلاگ‌ها موضوعات انجمن‌ها تصاویر آلبوم‌ها رویداد‌ها مقالات صفحه‌هات استاتیک فایل‌ها (مرکز دانلود) محدودیت ویرایش زمانی مطالب (بدون محدودیت زمانی) توانایی ویرایش مطالب به صورت مخفی (به طور عادی اگر مطلبی ویرایش گردد در زیر آن عبارت ویرایش شده قرار می گیرد. اگر فعال شود، کاربران این گروه قادر خواهند بود این پیام را مخفی نمایند. مدیران تالاری که دسترسی مربوطه را دارند همیشه قادر به مشاهده این پیام هستند.) توانایی مخفی سازی مطالب خود توانایی حذف مطالب خود توانایی قفل یا باز کردن مطالب خود محدودیت ارسال مطلب، دیدگاه و نظرسنجی 30 عدد در روز توانایی گزارش مطالب امکان بازنشر در شبکه‌های اجتماعی نیاز مطالب ارسالی به تایید توسط مدیران را ندارد توانایی بارگذاری فایل در پیام‌های خصوصی و چت توانایی نشان دادن افراد واکنش نشان داده شده امکان ایجاد بلاگ امکان ارسال نظر در پست‌های بلاگ توانایی ایجاد گالری توانایی ایجاد آلبوم توانایی ارسال ویدیو امکان ایجاد پُست به عنوان اسناد معتبر (ویژه، مهم) مدیریت تاپیک‌ها برای عمل‌های ایجاد، حذف، قفل کردن، باز کردن، ویرایش و انتقال مدیریت کاربران (اخطار، رسیدگی به شکایت و بررسی صف‌های پذیرش) ایجاد مقاله در بخش مقالات و یا وبلاگ تخصصی به صورت (مشارکت گروهی) توانایی مشاهده‌ی دریافت کنندگان فایل توانایی مشاهده‌ی پذیرنده‌های فایل توانایی مدیریت نسخه‌ها توانایی فروش و کسب پورسانت از فایل‌ها در بخش مرکز دانلود و فروشگاه توانایی ارسال چند فایل به صورت همزمان گروه‌های کاربری، مدیران کل سایت توانایی دسترسی به سایت توانایی تغییر نام کاربری بدون محدودیت نمایش در لیست آخرین کاربران و اطلاعات آنلاین توانایی ارسال تصویر کاور توانایی استفاده از انیمیشن‌های متحرک بر روی آواتار اجازه‌ی نمایش کاربران و مطالب مرتبط به آن در نتایج جستجو توانایی نمایش تاریخچه‌ی نام نمایشی توانایی دسترسی به سایت در هنگام آفلاین بودن توانایی ایجاد نظرسنجی توانایی رای دادن در نظر‌سنجی‌ها توانایی بستن نظر‌سنجی خود توانایی استفاده از برچسب‌ها توانایی استفاده از پیشوند‌ها گفتگو‌های مجاز برای ارسال در هر هفته (نامحدود) گفتگوهای مجاز برای آغاز در هر دقیقه (نامحدود) حداکثر دریافت کننده در هر گفتگو (نامحدود) امکان استفاده از امضاء توانایی بارگذاری فایل نمایش پاسخ‌های برجسته (نمایش پاسخ‌های این گروه در ویژگی و رنگ خاص) توانایی ارسال امتیاز به مطالب توانایی تغییر امتیاز به مطالب توانایی ویرایش مطالب خود در ماژول‌های زیر گفتگو‌های خصوصی به‌روز‌رسانی وضعیت مطالب وبلاگ‌ها موضوعات انجمن‌ها تصاویر آلبوم‌ها رویداد‌ها مقالات صفحه‌هات استاتیک فایل‌ها (مرکز دانلود) محدودیت ویرایش زمانی مطالب (بدون محدودیت زمانی) توانایی ویرایش مطالب به صورت مخفی (به طور عادی اگر مطلبی ویرایش گردد در زیر آن عبارت ویرایش شده قرار می گیرد. اگر فعال شود، کاربران این گروه قادر خواهند بود این پیام را مخفی نمایند. مدیران تالاری که دسترسی مربوطه را دارند همیشه قادر به مشاهده این پیام هستند.) توانایی مخفی سازی مطالب خود توانایی حذف مطالب خود توانایی قفل یا باز کردن مطالب خود محدودیت ارسال مطلب، دیدگاه و نظرسنجی (نامحدود) عدد در روز توانایی گزارش مطالب امکان بازنشر در شبکه‌های اجتماعی نیاز مطالب ارسالی به تایید توسط مدیران را ندارد توانایی بارگذاری فایل در پیام‌های خصوصی و چت توانایی نشان دادن افراد واکنش نشان داده شده امکان ایجاد بلاگ امکان ارسال نظر در پست‌های بلاگ توانایی ایجاد گالری توانایی ایجاد آلبوم توانایی ارسال ویدیو امکان ایجاد پُست به عنوان اسناد معتبر (ویژه، مهم) مدیریت تاپیک‌ها برای عمل‌های ایجاد، حذف، قفل کردن، باز کردن، ویرایش و انتقال مدیریت کاربران (اخطار، رسیدگی به شکایت و بررسی صف‌های پذیرش) ایجاد مقاله در بخش مقالات و یا وبلاگ تخصصی به صورت (مشارکت گروهی) توانایی مشاهده‌ی دریافت کنندگان فایل توانایی مشاهده‌ی پذیرنده‌های فایل توانایی مدیریت نسخه‌ها توانایی فروش و کسب پورسانت از فایل‌ها در بخش مرکز دانلود و فروشگاه توانایی ارسال چند فایل به صورت همزمان گروه‌های کاربری بنیان‌گذاران، مدیران کل سایت اعضای این گروه مجوز خاص مدیریتی جهت اعمال دسترسی‌ها، مدیریت گروه‌های کاربری و رسیدگی به نگه‌داری و پشتیبانی سیستم نرم‌افزاری را در اختیار دارند.
  25. 0 امتیاز
    کامپایلر Cling یک مترجم تعاملی برای سی‌پلاس‌پلاس است، این مترجم تحت بالاترین کتابخانه‌های Clang و LLVM ساخته شده است. در واقع از آن‌جایی که کامپایلر Clang از آخرین ویژگی‌ها و استاندارد‌های زبان سی‌پلاس‌پلاس پشتیبانی می‌کند، Cling اجازه می‌دهد تا توسعه‌دهندگان اسکریپت‌های خود را با استفاده از C و C++ بنویسند. اگر شما به طور مستقیم مترجم را اجرا کنید، یک محیط زنده برای آغاز برنامه نویسی با سی‌پلاس‌پلاس را خواهید داشت که به عنوان بخشی از استاندارد نحو سی و سی‌پلاس‌پلاس به شمار می‌آید. همچنین می‌توانید دیگر دستورات را با نقطه‌ی "." آغاز در اختیار داشته باشید. وقتی از مترجم تعاملی استفاده می‌کنید، می‌توانید کد زیر را بنویسید: #include <stdio.h> printf("hello world\n"); همانطور که می‌بینید نیازی نیست تا در مورد حوزه‌ی دامنه‌ها نگران باشید؛ کافی است شما تابع مورد نظر خود را صدا بزنید. اگر قصد شما این است که از Cling به عنوان یک مترجم برای ساخت اسکریپت‌ها استفاده کنید، باید همه چیز را در داخل یک تابع قرار دهید.چرا که نقطه‌ی ورود به اسکریپت به طور پیش‌فرض همانند نام فایل می‌باشد. می‌توان آن را برای صدا زدن دیگر توابع سفارشی سازی کرد. بنابراین مثال قبل می‌توانید به شکل زیر تغییر کند: #include <stdio.h> void _01_hello_world() { printf("foo\n"); } یک نسخه‌ی دیگر در قالب سی‌پلاس‌پلاس #include <iostream> void _02_hello_world() { std::cout << "Hello world" << std::endl; } مثال‌ها کاملاً ساده هستند، اما آن‌ها به شما نشان می‌دهند که چگونه باید شروع کنید. در مورد کیوت چطور؟ #include <QtWidgets/qapplication.h> #include <QtWidgets/qpushbutton.h> void _03_basic_qt() { int argc = 0; QApplication app(argc, nullptr); QPushButton button("Hello world"); QObject::connect(&button, &QPushButton::pressed, &app, &QApplication::quit); button.show(); app.exec(); } اما توجه داشته باشید که کد قبلی کار نخواهد کرد، شما باید برخی از پارامتر‌های سفارشی را در Cling مشخص کنید. cling -I/usr/include/x86_64-linux-gnu/qt5 -fPIC -lQt5Widgets 03_basic_qt.cpp شما می‌توانید Cling را برای خودتان بر اساس آن چیزی که برای اسکریپت خود نیاز دارید سفارشی سازی کنید. همچنین شما می‌توانید Cling را به عنوان یک کتابخانه در اپلیکیشن‌های خود آورده و از سی‌پلاس‌پلاس به عنوان زبان برنامه‌نویسی استفاده کنید. این پُست در آینده ادامه خواهد داشت.
این صفحه از پرچمداران بر اساس منطقه زمانی تهران/GMT+04:30 می باشد
×