برای اینکه بدانیم توکن در برنامه نویسی چیست لازم است بگوییم که توکن در معنای لغوی، بخش کوچکی از کل یا عضوی از یک گروه بزرگ تعریف میشود. اصطلاح توکن در هر زمینه دارای معنای متفاوتی است. در دنیای شبکه، توکن یک دنبالهای خاص از بیتها است که در یک شبکه توکن رینگ (token-ring network) در گردش است. توکن در اینجا نقش بلیط را دارد و رایانهای که یک توکن داشته باشد، میتواند یک پیام در شبکه ارسال کند. برای هر شبکه فقط یک توکن وجود دارد، بنابراین هیچ امکانی وجود ندارد که دو رایانه همزمان سعی کنند پیامی ارسال کنند. بنابراین تا زمانی که یک رایانه توکن را در اختیار دارد و یک پیام ارسال میکند، سایر رایانهها باید منتظر بمانند تا توکن به آنها برسد و امکان ارسال پیام به آنها داده شود. در سیستمهای امنیتی، توکن امنیتی یک دستگاه فیزیکی یا دیجیتال است که برای احراز هویت کاربران استفاده میشود.

توکنهای امنیتی گاهی اوقات به شکل کارتهای هوشمند RFID هستند که برای کنترل دسترسی به ساختمانهای شرکت استفاده میشوند. همچنین در صنعت ارز دیجیتال توکن یک نوع دارایی دیجیتال است که قابلیت انتقال به دیگران و ذخیره ارزش در خود را داردکه بر بستر تکنولوژی بلاکچین تولید میشوند. در دنیای برنامهنویسی توکن یک عنصر واحد از زبان برنامهنویسی است که توسط کامپایلر شناسایی و پردازش می شوند. به عبارتی دیگر کامپایلر حین فرآیند ترجمه، هر توکن را درک کرده و آنها را به انواع مختلفی مانندکلمهکلیدی، شناساگرها، عملگرها و غیره طبقهبندی میکند. در این مطلب از مجله فرادرس یاد میگیریم که توکن در برنامهنویسی چیست و انواع آنها را همراه با مثال توضیح میدهیم.
توکن در برنامه نویسی چیست؟
در این مطلب از مجله فرادرس میخواهیم به طور خاص به این موضوع بپردازیم که توکن در برنامه نویسی چیست، کوچکترین عنصر واحد یک برنامه یا به عبارتی هر چیزی که داخل یک برنامه میبینیم «Token» (توکن) نامیده میشود. برای مثال، این جمله فارسی را در نظر بگیرید. « زبان برنامهنویسی C بسیار فوقالعاده است و توسط دنیس ریچی در آزمایشگاههای AT&T Bell در سال ۱۹۷۲ توسعه یافته است.» جمله بالا از حروف الفبا، فاصله بین کلمات، ارقام و کاراکترهای خاص – مثلا «نقطه» – ساخته شده است که به آنها اجزای سازنده یا عناصر اصلی جمله میگوییم. به طور مشابه هر زبان برنامهنویسی نیز از یک سری عناصر پایه یا اجزای اصلی تشکیل شده است که برنامهنویسان از آنها برای ساختاردهی و تعریف عملکرد برنامهها استفاده میکنند.
این عناصر پایه که همان توکن نامیده میشوند شامل موارد زیر است.

کلمه کلیدی چیست؟
کلمات کلیدی، کلماتی هستند که توسط زبان برنامهنویسی رزرو شدهاند و معنای خاصی دارند و نمیتوانند برای اهداف دیگری در برنامهنویسی استفاده شوند. در هر زبان برنامهنویسی مجموعهای از کلیدواژهها تعریف شده است که برخی آنها در ادامه فهرست شدهاند.
این کلمات کلیدی معمولا در زبانهای برنامهنویسی C و مشتقات آنها نظیر C++ و C# بهکار میروند. همچنین لازم است در اینجا بگوییم که در این مطلب، تمامی مثالهای آورده شده از کدها در زبان برنامهنویسی c++ هستند.
- int: کلمهکلیدی int نشاندهنده نوع داده «عدد صحیح» (Integer) در زبانهای برنامهنویسی است.
- do : کلمهکلیدی کنترلی do در ساختار حلقه do-while، بلاک کد را حداقل یک بار اجرا میکند و سپس شرط را بررسی میکند.
- while: کلمهکلیدی کنترلی while برای ایجاد حلقههای تکراری در برنامهنویسی است و این حلقهها تا زمانی که یک شرط خاص برقرار باشد، یک بلاک کد را اجرا میکنند.
- void: کلمهکلیدی Void نشان میدهد که تابع هیچ مقداری را به عنوان خروجی تولید نمیکند.
- return: کلمهکلیدی return اجرای تابع را پایان میدهد و مقداری را به عنوان خروجی ارسال میکند.
شناساگر چیست؟
شناساگرها همان اسامی هستند که به المانهای مختلف برنامهنویسی اختصاص میدهیم که ممکن است نامی برای یک متغیر یا یک تابع باشند. در ادامه قوانین مهم نامگذاری را فهرست میکنیم.
- کلمات کلیدی نباید به عنوان شناساگر استفاده شوند. همانطور که گفتیم کلمات کلیدی نظیر، If، do، while و غیره معنای خاص خود را در زبان برنامهنویسی دارند و نمیتوانند برای اهداف دیگر استفاده شوند.
- شناساگر باید با یک حرف الفبا a-z ،A-Z یا نماد «زیرخط» ( ـ
| Underscore) شروع شود. به عبارت دیگر، استفاده از عدد یا نماد خاص در ابتدای شناساگر مجاز نیست.
- هر شناساگری میتواند شامل حروف a-z ،A-Z، اعداد 0-9 و نماد زیرخط باشد.
- شناساگر نباید حاوی هیچ کاراکتر ویژهای- از جمله، !@$*.'[]
- البته به غیر از نماد زیرخط باشد.

در اینجا نمونههایی از شناساگرهای معتبر در زبانهای برنامهنویسی آورده شده است.
num, Num, _num, _Num, num1, Num1, _num1, _Num1, _1num, _1Num, _num_, number_to_add
به نمونههایی از شناساگرهای غیرمعتبر اشاره میکنیم.
1num, number to add, 1_num, num-to-add, num@
عملگر چیست؟
«عملگرها» (Operators) نمادهای خاصی هستند که برای انجام عملیات ریاضی، منطقی یا سایر عملیات بر روی دادهها استفاده میشوند. زبانهای برنامهنویسی مختلف مجموعههای مختلفی از عملگرها را ارائه میدهند. برخی از عملگرهای رایج در ادامه آوردهایم.
عملگر حسابی
«عملگر حسابی» (Arithmetic Operator ) در برنامه نویسی برای انجام عملیات ریاضی روی مقادیر عددی استفاده میشوند. این عملگرها معمولاً نمادهایی هستند که بین دو یا چند عملوند قرار میگیرند و نتیجه عملیات را تولید میکنند. توجه داشته باشید که در تمامی مثالها فرض میکنیم متغیرهای a = 10 و b = 5 به عنوان ورودی عملگر تعریف شدهاند.
- «عملگر جمع» +
: این عملگر برای جمع کردن دو عملوند استفاده میشود. به عنوان مثال، a + b برابر با 15 است.
- «عملگر ضرب» *
: این عملگر برای ضرب دو عملوند استفاده میشود. به عنوان مثال، a * b برابر با 50 است.
- «عملگر تقسیم» /
: این عملگر برای تقسیم دو عملوند استفاده میشود. به عنوان مثال، a / b برابر با 2 است.
- «عملگر باقیمانده تقسیم» %
: این عملگر اولین عملوند را از دومی تقسیم میکند و باقیمانده را برمیگرداند که معمولاً برای بررسی قابلیت تقسیمپذیری استفاده میشود. به عنوان مثال، a % b برابر با 0 است.
- «عملگر تفریق» -
: این عملگر برای کسر کردن دومین عملوند از اولین عملوند استفاده میشود. به عنوان مثال، a – b برابر با 5 است.
عملگر انتساب
«عملگر انتساب» (Assignment Operator) نیز برای اختصاص مقدار به یک متغیر استفاده میشود. در مثال a = 10، به متغیر a مقدار 10 اختصاص داده میشود.
عملگر مقایسهای
«عملگر مقایسهای» (Relational Operator) عملگرهای مقایسهای برای بررسی رابطه بین دو عملوند استفاده میشوند. این عملگرها مقادیر عملوندها را مقایسه میکنند و نتیجه را به عنوان یک مقدار منطقی (True یا False) برمیگردانند. در برنامهنویسی، عملگرهای مقایسهای شامل موارد زیر هستند.
- عملگر «بزرگتر» >
:اگر مقدار عملوند سمت چپ بیشتر از مقدار عملوند سمت راست باشد، آنگاه نتیجه «True» است و در غیر اینصورت «False» برگردانده میشود. در این مثال، نتیجه ($$ a>b $$) «True» خواهد بود.
- عملگر «کوچکتر» <
: اگر مقدار عملوند سمت چپ کمتر از عملوند سمت راست باشد، آنگاه نتیجه «True» است و در غیر این صورت «False» را برمیگرداند. در این مثال، نتیجه ($$ a<b $$) «False» خواهد بود.
- عملگر «مساوی» ==
: اگر مقادیر دو عملوند دقیقاً برابر باشند، نتیجه «True» است و در غیر این صورت «False» برگرداننده میشود. در این مثال، نتیجه ($$ a==b $$) «False» است.
- عملگر «نامساوی» !=
: اگر مقادیر دو عملوند دقیقاً برابر نباشند، نتیجه «True» است و در غیر این صورت «False» برگردانده میشود. در این مثال، نتیجه ($$ a!=b $$) «False» است.
- عملگر «بزرگتر یا مساوی» >=
: اگر مقدار عملوند سمت چپ از عملوند سمت راست بیشتر یا مساوی باشد، «True» را برمیگرداند، در غیر این صورت نتیجه «False» است. در این مثال، نتیجه ($$ a >= b $$) «True» است.
- عملگر «کوچکتر یا مساوی» <=
: اگر مقدار عملوند سمت راست از عملوند سمت چپ کمتر یا مساوی باشد، «True» برگردانده میشود، در غیر این صورت نتیجه «False» است. در این مثال، نتیجه ($$ a <= b $$) «False» است.

عملگرهای منطقی
«عملگرهای منطقی» (Logical Operator)، دو عبارت بولی را با هم ترکیب میکنند و یک مقدار بولی را به عنوان نتیجه ارائه میدهند. عملگرهای «OR» ،«AND» و «NOT» به ترتیب دارای معانی «و»، «یا» و «نه» هستند. در برنامه نویسی عمگرهای منطقی به شرح زیر هستند.
- «AND» &&
: برای ترکیب دو عبارت استفاده میشود. اگر هر دو عملوند «True» یا غیر صفر باشند، نتیجه «True» و در غیر این صورت «False» است. در این مثال، نتیجه $$ ((a>=1) & (a<=5)) $$ «True» خواهد بود. کد ساده زیر عملگر منطقی «AND» (&&) را به خوبی نشان میدهد.
1#include <iostream> 2using namespace std; 3 4int main() 5{ 6 cout << "Enter a number: "; 7 int num {}; 8 cin >> num; 9 10 if (num > 0 && num <= 10) 11 cout << "Your number is between 1 and 10"; 12 else 13 cout << "Your number is not between 1 and 10"; 14 return 0; 15}
- «OR» ||
: اگر هر یک از عملوندها «True» یا غیرصفر باشد، عبارت بولی «True» و در غیر این صورت «False» برگردانده میشود. در مثال $$ ((a>1) || (a<5)) $$، نتیجه عبارت، «True» خواهد بود زیرا حداقل یکی از دو شرط ($$ 1<a $$) یا ($$ 5>a $$) برقرار است. به عنوان مثال، کد زیر با استفاده از کاربرد همین عملگر روشی برای شناسایی دو عدد شانسی وارد شده توسط کاربر ارائه داده است.
1#include <iostream> 2using namespace std; 3 4int main() { 5 6 cout << "Enter a number: "; 7 int num {}; 8 cin >> num; 9 if(num == 4 || num == 8) 10 cout << "You chose a winning number!"; 11 else 12 cout << "Sorry, better luck next time."; 13 return 0; 14}
- «NOT» !
: عملگر «یگانی» (Unary) است که بر روی یک مقدار بولی عمل میکند و مقدار معکوس آن را برمیگرداند. به عبارت دیگر، اگر مقدار ورودی True باشد، عملگر NOT مقدار False را برمیگرداند و برعکس. مثال زیر یکی از کاربردهای عملگر منطقی «NOT» را نشان میدهد.
1#include <iostream> 2using namespace std; 3 4int main() 5{ 6 cout << "Enter a number: "; 7 int x {}; 8 cin >> x; 9 10 if (!x == 0) 11 cout << "You typed a number other than 0"; 12 else 13 cout << "You typed zero"; 14 15 return 0; 16}
عملگر بیتی
«عملگرهای بیتی» (Bitwise Operators) عملیاتی را بر روی دادهها در سطح بیت – یا به عبارتی، بیت به بیت – انجام میدهند.
- عملگر «AND» &
: عملیات « وَ » (anding) را بر روی دو مقدار بیت دودویی انجام میدهد. اگر هر دو بیت 1 باشند نتیجه 1 خواهد بود در غیر این صورت نتیجه 0 خواهد بود. به مثال زیر توجه کنید.
0000 1010 & 0000 0101 ____________ 0000 0000
- عملگر «OR» |
: اگر هر کدام از دو بیت دودویی 1 باشند 1 برمیگرداند در غیر این صورت نتیجه 0 خواهد بود. مثال زیر را در نظر بگیرید.
0000 1010 | 0000 0101 ___________ 0000 1111
- عملگر «XOR» ^
: اگر هر دو بیت دودویی متفاوت باشند 1 برمیگرداند در غیر این صورت نتیجه 1 میشود. در اینجا مثالی آورده شده است.
0000 1010 ^ 0000 0101 ___________ 0000 1111
- عملگر «مکمل» ~
: عملگر یگانی محسوب میشود که مکمل مقدار دودویی را به عنوان نتیجه برمیگرداند، یعنی اگر بیت دودویی 0 باشد 1 برمیگرداند در غیر این صورت 0 برمیگرداند. در اینجا مثالی برای نشان دادن نحوه عملکرد این عملگر آورده شده است.
~ 0000 1010 ___________ 1111 0101
- «عملگر شیفت به چپ» >>
: عملگر شیفت به چپ همچنین یک عملگر یگانی است. این عملگر بیت دودویی را به سمت چپ منتقل میکند و باعث درج بیت صفر به انتهای راست مقدار دودویی میشود. یا میتوان گفت که به طور کلی مقدار ورودی را در 2 ضرب میکند. در اینجا مثالی برای نشان دادن نحوه عملکر شیفت به راست نمایش داده شده است.
0000 1010 << 2 = 0010 1000
- «عملگر شیفت به راست» <<
: عملگر یگانی است که بیتهای دودویی را به سمت راست حرکت میدهد و مقدار بیت 0 را در سمت چپ مقدار دودویی درج میکند. به عبارتی دیگر این عملگر مقدار ورودی را در 2 تقسیم میکند. به مثال زیر توجه کنید.
0000 1010 >> 2 = 0000 0010
عملگرهای افزایشی یا کاهشی
عملگرهای افزایشی یا کاهشی از نوع «یگانی» (Unary) هستند که برای افزایش یا کاهش یک عدد صحیح به مقدار واحد بهکار میروند. این دو عملگر به هر دو صورت پیشوندی و پسوندی بهکار میروند. در بسیاری از زبانهای برنامهنویسی، اگر از ++ به عنوان پیشوند استفاده شود (مانند ++var)، ابتدا مقدار var افزایش مییابد و سپس، عمل بعدی انجام میشود. عکس این قاعده برای حالت پسوندی صدق میکند. در ۲ مثال زیر به بیانی شفافتر فرق این دو حالت را نشاندادهایم.

در اینجا، مقدار var به 6 افزایش مییابد و سپس به result اختصاص داده میشود که در نهایت var و result هر دو برابر با 6 هستند.
1int var = 5;
2int result = ++var;
در این بخش، مقدار var به result اختصاص داده میشود – همان مقدار 5 – و سپس متغیر var به 6 افزایش مییابد که در نهایت var برابر با 6 و result برابر با 5 است.
1int var = 5;
2int result = var++;
عملگر شرطی
«عملگر شرطی یا سهتایی» (Conditional Operator| Ternary) از نظر ساختاری مشابه به یک جمله if-else ساده است و از ۳ عملوند تشکیل شده است.
-
- شرایط: یک عبارت منطقی که باید ارزیابی شود.
- بخش درست: مقداری که در صورت درست بودن شرط، بازگشت داده میشود.
- بخش نادرست: مقداری که در صورت نادرست بودن شرط، بازگشت داده میشود.
ساختار کلی عملگر شرطی به صورت (بخش نادرست) ? (بخش درست) : (شرایط) تعریف میشود. در مثال b = (a>1) ? a : b;
اگر مقدار a بیشتر از 1 باشد، مقدار a در b ذخیره میشود؛ در غیر این صورت، مقدار قبلی b حفظ میشود.
جدا کننده چیست؟
در برنامه نویسی، جداکنندهها برای جداسازی عناصر مختلف کد استفاده میشوند. این جداکنندهها به خوانایی و درک بهتر کد کمک میکنند و همچنین برای اجرای صحیح برنامهها ضروری هستند.
در اینجا انواع رایج جداکنندههای مورد استفاده در برنامه نویسی آورده شده است:
- «فاصله» (Space): فاصله برای فضای خالی بین کلمات و عبارات مختلف در کد استفاده میشود.
- تَب t
: کاراکتر تب در زبانهای برنامه نویسی مانند C++ ،C و Bash به صورت «t» نوشته میشود و زمانی که در یک رشته قرار میگیرد، یک فاصله افقی با اندازه یک tab ایجاد میکند.
- خط جدید n
: خط جدید برای شروع یک سطر جدید در کد استفاده میشود.
- کاما ,
: کاما برای جدا کردن عناصر مختلف در یک لیست یا آرایه مورد استفاده قرار میگیرد.
- سمیکالن ;
: علامت سمیکالن برای جدا کردن دستورات مختلف در یک بلوک کد استفاده میشود. به عنوان مثال، در زبان برنامه نویسی C، میتوانید چند دستور را در یک بلوک قرار دهیم و با علامت کاما آنها را جدا کنیم. به عنوان مثال، در زبان برنامه نویسی ++C، دستورات معمولاً با سمیکالن (;) به پایان میرسند.
- پرانتز ()
و آکولاد {}
: پرانتز و آکولاد در مقداردهی اولیه آرایه و ساختار حلقه for استفاده میشوند.
- براکت []
: براکتها معمولاً برای دسترسی به عناصر آرایهها استفاده مورد استفاده قرار میگیرند.
- در ادامه مثالی آوردهایم که کاربرد جداکننده در زبان برنامهنویسی را به خوبی نشان میدهد. این قطعه کد با استفاده از زبان برنامهنویسی C++ نوشته شده است.
1#include <iostream>
2
3int main() {
4 // Using spaces, tabs, new lines, commas, semicolons, and brackets
5 int array[] = {1, 2, 3, 4, 5};
6
7 // Print elements in array with separators
8 std::cout << "Array elements: ";
9 for (int i = 0; i < 5; ++i) {
10 std::cout << array[i];
11
12 // Use various separators
13 if (i < 4) {
14 std::cout << ", "; // Comma and space
15 } else {
16 std::cout << " "; // Space
17 }
18
19 // Use tabs and new lines
20 if (i % 2 == 0) {
21 std::cout << "t"; // Tab
22 } else {
23 std::cout << "n"; // New line
24 }
25 }
26
27 // Using parentheses, curly braces, and square brackets
28 std::cout << "}" << std::endl;
29
30 return 0;
31}
وقتی برنامه را اجرا کنید، خروجی زیر تولید میشود.
Array elements: 1, 2, 3, 4, 5 }
لیترال چیست؟
«لیترالها» (Literals) مقادیر ثابتی هستند که در عملیات و محاسباتهای مختلفی مورد استفاده قرار میگیرند. لیترالها به طور معمول در ۳ دسته تفکیک میشوند.
- «عدد صحیح» (Integer): اعداد صحیح و بدون اعشار هستند. به عنوان مثال، 1، 100، -12312 و غیره از این دسته از اعداد هستند.
- «عدد ممیز شناور» (Floating point): عدد ممیز شناور، یک عدد صحیح مثبت یا منفی با یک نقطه اعشار است. به عنوان مثال، اعداد 2.123، 1.02، -2.33، 13e54 و 23.3- همگی اعداد ممیز شناور هستند، در حالی که 91 و 0 این خاصیت را ندارند. نام «ممیز شناور» از این آمده که نقطه اعشار در این اعداد میتواند به هر مکانی حرکت کند به دلیل این ویژگی، در علم کامپیوتر اغلب به اعداد ممیز شناور float میگویند.
- «کاراکتر» (Character): کاراکتر واحد اطلاعاتی است که به صورت حرف یا نماد نمایش داده میشود. برای مثال در زبان C++ اگر کاراکترها به صورت چندتایی و در قالب رشته باشند با تقل قول دوتایی یا همان ” “
احاطه میشوند ولی اگر به صورت تکی باشد در نقل قول تکی یا ‘ ‘
ارائه میشوند.

سوالات رایج
در این قسمت میخواهیم برخی از سوالات رایج پیرامون این موضوع که توکن در برنامه نویسی چیست را مرور کنیم.
توکن در برنامه نویسی چیست؟
کوچکترین عنصر واحد یک برنامه یا به عبارتی هر چیزی که داخل یک برنامه میبینیم «Token» (توکن) نامیده می شود.
انواع توکن در برنامه نویسی چیست؟
در زبانهای برنامهنویسی معمولا پنج دسته توکن ازجمله: کلمهکلیدی، شناساگر، عملگر، جداکنندهها و لیترالها تعریف میشوند.
علت استفاده از توکن در برنامه نویسی چیست؟
توکنها عناصر مختلف زبان برنامهنویسی هستند که که توسط کامپایلر برای درک و پردازش کد منبع استفاده میشوند. به عبارتی دیگر، کامپایلر در نخستین فاز خود، که «تحلیل واژهای» (Lexical Analysis) نامیده میشود، متن کد را به توکنهای مختلف تقسیم میکند. سپس، توکنها به عنوان ورودی در فازهای مختلفی از فرآیند ترجمه یا تفسیر برنامه استفاده میشوند که منجر به تولید «کد میانی» (Intermediate Code) و سپس اجرای برنامه میشوند.
جمعبندی
ما در این مطلب از مجله فرادرس یادگرفتیم که توکن در برنامه نویسی چیست و با انواع آن در برنامهنویسی آشنا شدیم. توکن کوچکترین عنصر واحد یک برنامه است که توسط کامپایلر شناسایی و پردازش میشود. توکنها در ۵ دسته کلی از جمله، کلمات کلیدی، شناسهها، عملگرها، جداکنندهها و لیترالها تقسیم میشوند.
کلمات کلیدی کلماتی هستند که معنای خاصی در زبان برنامهنویسی دارند، مانند کلمات if، else، for و while. شناساگرها نامهایی هستند که برای شناسایی متغیرها، توابع و سایر عناصر برنامه به کار میروند. علاوه بر آن، عملگرها نشانههایی هستند که برای انجام عملیات ریاضی، منطقی و سایر عملیات روی دادهها استفاده میشوند. جداکنندهها نیز نشانههایی هستند که برای جداسازی عناصر مختلف یک برنامه استفاده میشوند. در نهایت، لیترالها مقادیر ثابتی مانند اعداد، رشتهها و کاراکترها هستند که در برنامه مورد استفاده قرار میگیرند. به طور کلی، درک مفهوم توکن برای برنامهنویسان ضروری است، زیرا توکنها اساس ساختار و عملکرد برنامهها را تشکیل میدهند.
source