لیست محبوبترین زبانهای برنامهنویسی در بین دولوپرهای خانم گزارشی تحت عنوان زنان در حوزه تکنولوژی در سال 2018 منتشر شد که در آن بیش از 14000دولوپر حرفهای مشارکت داشتند و از میان ایشان حدود 2000نفر خانم بودند. در راستای مشاهده تغییرات جالبی که در صنعت تکنولوژی در حال شکلگیری است،اجازه دهید لیستی از زبانهای برنامهنویسی را که بیشتر دولوپرهای خانم از آنها استفاده میکنند، بررسی کنیم:
1. Java
2. JavaScript
3. C
4. C++
5. Python
6. PHP
7. C#
8. Ruby
9. R
10. Perl
11. TypeScript
12. Swift
13. Scala
14. Go
15. Haskell
clearviewport :
clearviewport در زبان C++ مستقیماً به عنوان یک تابع یا کلمه کلیدی استاندارد وجود ندارد. اما در چارچوبهای گرافیکی یا بازیسازی (مانند OpenGL، DirectX، یا موتورهای بازی مثل Unity و Unreal Engine)، این مفهوم به پاک کردن یا بازنشانی ناحیه نمایش (viewport) اشاره دارد.
به طور خلاصه، clearviewport در این بافتها به معنای پاک کردن بافر رنگ و/یا عمق با یک رنگ یا مقدار مشخص است تا بتوان صحنه جدیدی را در آن ترسیم کرد. این کار قبل از شروع رندر کردن فریم جدید انجام میشود تا از تداخل تصاویر قبلی با تصویر جدید جلوگیری شود.
linerel :
linerel به صورت مستقیم یک تابع یا مفهوم استاندارد در زبان C++ یا کتابخانههای رایج آن نیست. احتمالاً منظور شما یکی از موارد زیر است:
line (تابع ترسیم خط): در کتابخانههای گرافیکی مانند BGI (Borland Graphics Interface) یا OpenGL، تابعی به نام line یا مشابه آن وجود دارد که برای ترسیم یک خط مستقیم بین دو نقطه استفاده میشود.
یک تابع سفارشی: ممکن است linerel نام یک تابع سفارشی در پروژهای باشد که شما با آن کار میکنید و وظیفهی آن ترسیم خطی با توجه به یک موقعیت نسبی (relative) باشد.در هر صورت، این تابع یا مفهوم به ترسیم یک خط مستقیم در محیط گرافیکی اشاره دارد.
converttorgb :
converttorgb به طور کلی به فرآیند تبدیل یک مقدار رنگی از یک فرمت (مانند HSL، HSV، CMYK، یا کد هگزادسیمال) به فرمت RGB (قرمز، سبز، آبی) اشاره دارد. این تبدیل برای نمایش رنگها در صفحه نمایش یا استفاده در توابع گرافیکی که ورودی RGB میپذیرند، ضروری است.
getdisplaycolor :
getdisplaycolor به طور کلی به تابعی اشاره دارد که رنگ نمایش داده شده در یک پیکسل خاص روی صفحه نمایش را برمیگرداند. این تابع معمولاً در برنامههایی که نیاز به تحلیل یا تعامل با رابط کاربری گرافیکی (GUI) دارند، استفاده میشود.
palettetype *getdefaultpalette:
PaletteType *getdefaultpalette( ); در C++ به یک تابع اشاره دارد که یک اشارهگر به یک ساختار داده از نوع PaletteType را برمیگرداند که نمایانگر پالت رنگ پیشفرض سیستم یا برنامه است.
[Error] expected primary-expression before '<<' token
این خطا معمولاً به این معنیه که کامپایلر در جایی که انتظار یه “عبارت” (expression) رو داشته، یه توکن << دیده و نمیدونه چطور اون رو تفسیر کنه. این معمولاً به خاطر یکی از این دلایل اتفاق میافته:
جای اشتباه <<: گاهی اوقات << رو جایی گذاشتی که نباید باشه، مثلاً بعد از یه دستور if یا for بدون اینکه دستور کامل باشه، یا بین دو عبارت که نباید با هم ترکیب بشن.
سینتکس اشتباه در cout: شاید یه خطای تایپی در استفاده از cout یا توکن << وجود داشته باشه. مثلاً ممکنه یه << اضافه یا کم گذاشته باشی، یا قبل از << یه نیمکُلون (;) قرار گرفته باشه.
ترکیب اشتباه عبارات: مثلاً اگر بخوای یه متغیر رو با یه رشته ترکیب کنی، باید حواست به سینتکس باشه.
بلوک try-catch در C++ برای مدیریت استثناءها (Exceptions) استفاده میشود. این مکانیسم به شما اجازه میدهد که کدی را که ممکن است باعث خطا یا استثناء شود، در یک محیط کنترلشده اجرا کنید و در صورت وقوع خطا، برنامه به جای کرش کردن، بتواند به صورت کنترلشده به خطا واکنش نشان دهد.
ساختار کلی به این صورت است:
try: کدی که احتمال وقوع استثناء در آن وجود دارد، درون بلوک try قرار میگیرد.
catch: اگر استثنایی در بلوک try رخ دهد، اجرای آن متوقف شده و کنترل به بلوک catch مربوطه منتقل میشود. شما میتوانید چندین بلوک catch برای مدیریت انواع مختلف استثناءها داشته باشید.
#include <iostream>
#include <stdexcept> // برای std::runtime_error
int main() {
int numerator = 10;
int denominator = 0;
int result;
try {
if (denominator == 0) {
// پرتاب یک استثناء از نوع runtime_error
throw std::runtime_error("Error: Division by zero is not allowed.");
}
result = numerator / denominator;
std::cout << "Result: " << result << std::endl; // این خط اجرا نخواهد شد
}
catch (const std::runtime_error& e) {
// مدیریت استثناء
std::cerr << "Caught exception: " << e.what() << std::endl;
}
catch (...) {
// مدیریت هر استثناء دیگری که نوع آن مشخص نشده باشد (Catch-all)
std::cerr << "Caught an unknown exception." << std::endl;
}
std::cout << "Program continues execution." << std::endl;
return 0;
}
نکات کلیدی:
throw: کلمه کلیدی است که برای ایجاد (پرتاب کردن) یک استثناء استفاده میشود.
انواع استثناء: میتوانید انواع مختلفی از استثناءها را پرتاب و مدیریت کنید، مانند:
استثناءهای استاندارد کتابخانه (مانند std::out_of_range, std::invalid_argument).
کلاسهای استثناء سفارشی که از کلاس پایه std::exception ارثبری میکنند.
catch(...): این یک گیرنده عمومی است که هر نوع استثنایی را که قبلاً توسط گیرندههای خاص مدیریت نشده باشد، میگیرد. بهتر است این را همیشه به عنوان آخرین catch قرار دهید.
اجرای کد پس از خطا: پس از مدیریت موفقیتآمیز یک استثناء در بلوک catch، اجرای برنامه از ادامهی بلوک try-catch (بعد از آخرین catch) دنبال میشود، نه از ابتدای بلوک try.
تابع sleep() یکی از مفاهیم بنیادی در برنامهنویسی همروند (Concurrent Programming) و مدیریت زمان در سیستمعاملهاست.
تشریح تابع sleep() در C/C++
تابع sleep() برای متوقف کردن اجرای یک ریسه (Thread) یا فرآیند (Process) برای یک مدت زمان مشخص استفاده میشود. این کار باعث میشود که منابع CPU به طور موقت آزاد شده و برای کارهای دیگر در دسترس قرار گیرند.
۱. استانداردها و کتابخانهها
نحوه استفاده از sleep() بستگی به سیستمعامل و استانداردی دارد که از آن استفاده میکنید:
استاندارد POSIX (سیستمهای شبه یونیکس مانند لینوکس و macOS):
تابع: sleep(unsigned int seconds)
کتابخانه: <unistd.h>
واحد زمان: ثانیه (integer).
استاندارد ویندوز (Windows API):
تابع: Sleep(DWORD dwMilliseconds)
کتابخانه: <windows.h>
واحد زمان: میلیثانیه (DWORD یک عدد صحیح بدون علامت ۳۲ بیتی است).
استاندارد C++ مدرن (C++11 به بعد):
توصیه میشود از این روش استفاده کنید چون پلتفرم-مستقل (Platform-Independent) است.
تابع: std::this_thread::sleep_for(const chrono::duration& rel_time)
کتابخانه: <thread> و <chrono>
واحد زمان: هر واحد زمانی دلخواه (مثلاً نانوثانیه، میکروثانیه، میلیثانیه) که توسط std::chrono::duration مشخص میشود.
۲. مکانیسم کارکرد (در سطح سیستمعامل)
هنگامی که یک ریسه تابع sleep() را فراخوانی میکند، هسته سیستمعامل (Kernel) کار زیر را انجام میدهد:
انتقال به حالت انتظار (Waiting State): ریسه فراخواننده از لیست ریسههای “آماده اجرا” (Runnable) خارج شده و به لیست ریسههای “در انتظار” (Waiting/Sleeping) منتقل میشود.
آزادسازی زمانبند: زمانبند سیستمعامل (Scheduler) متوجه میشود که این ریسه فعلاً نیازی به منابع CPU ندارد و میتواند به ریسههای آماده دیگر فرصت اجرا دهد.
تایمر و بیدار شدن: هسته یک شمارنده زمانی داخلی برای آن ریسه تنظیم میکند. پس از سپری شدن مدت زمان مشخص شده، هسته ریسه را از حالت انتظار خارج کرده و آن را به لیست “آماده اجرا” برمیگرداند.
. تفاوت با تأخیر فعال (Busy Waiting)
تأخیر فعال (Active Waiting/Busy Waiting): شامل حلقههایی است که به طور مداوم شرطی را بررسی میکنند .
while (true) {
// CPU به طور مداوم در اینجا مشغول چک کردن است.
}
این روش باعث میشود CPU ۱۰۰٪ برای یک کار بیفایده مصرف شود.
استفاده از sleep(): این تابع به ریسه اجازه میدهد تا کاملاً از اجرای CPU خارج شود و تنها زمانی مجدداً فعال شود که زمان مقرر فرا برسد. این رویکرد بسیار کارآمدتر و استاندارد است، خصوصاً در سیستمهای چندوظیفهای (Multitasking).
Big O Notation یک ابزار ریاضی برای توصیف نحوه رشد (Scaling) زمان اجرای یک الگوریتم (یا مصرف حافظه آن) با افزایش حجم ورودی (nn) است. به زبان ساده، این نماد به ما میگوید که الگوریتم چقدر “کند” میشود وقتی ورودی آن خیلی بزرگ میشود.
نکته کلیدی: Big O بر بدترین حالت (Worst-Case Scenario) تمرکز دارد و با نادیده گرفتن ضرایب ثابت (Constants) و مراتب پایینتر (Lower Order Terms)، صرفاً بر روی مرتبه غالب (Dominant Term) تمرکز میکند. این کار باعث میشود بتوانیم الگوریتمها را بر اساس مقیاسپذیری آنها مقایسه کنیم، بدون اینکه وابسته به سختافزار خاصی باشیم.
چرا O(n) خوب است؟
در پروژههایی با دادههای حجیم (Big Data) یا سیستمهای بلادرنگ (Real-Time Systems) مانند رباتیک، ما همیشه به دنبال الگوریتمهایی با پیچیدگی پایین هستیم. O(n)معمولاً نشاندهنده یک الگوریتم بسیار کارآمد است، زیرا اجرای آن با افزایش حجم دادهها قابل پیشبینی و کنترل باقی میماند.
Qt Core: این کتابخانه اصلی نوشتن برنامهها در Qt است و شامل کلاسهایی برای مدیریت شیء، حوادث، زمانبندی و فایلها میشود.
Qt Widgets: برای ایجاد رابطهای کاربری کلاسیک و مبتنی بر ویجت. این کتابخانه شامل ابزارهایی مانند دکمهها، پنجرهها، منوها و غیره است.
Qt GUI: برای انجام کارهای گرافیکی مانند رندر کردن تصاویر، نگهداری و مدیریت رنگها و فضای گرافیکی.
Qt Quick: برای توسعه رابطهای کاربری با استفاده از QML (زبان نشانهگذاری Qt)، که به شما امکان میدهد گرافیک HTML5 و متحرک بسازید.
Qt Network: برای انجام وظایف شبکهای مانند ارسال و دریافت دادهها از طریق TCP/IP، HTTP و دیگر پروتکلهای شبکه.
Qt Multimedia: اگر قصد دارید محتوای چندرسانهای (صوت و ویدیو) را مدیریت کنید، این کتابخانه مفید است.
Qt SQL: برای دسترسی و کار با پایگاههای داده مختلف، از جمله SQLite، MySQL و PostgreSQL.