Void در برنامه نویسی چیست؟ – توضیح کاربردها به زبان ساده
متغیر یا عملگری در برنامهها که با هیچ نوع دادهای همراه نشده است به عنوان متغیر Void شناخته میشود. متغیر Void، در زبان برنامه نویسی C متغیری است که هیچ دادهای به آن نسبت داده نشده و به محل قرارگیری دادهها در حافظه اشاره میکند. در واقع Void به آدرس متغیرها اشاره میکند. به همچنین به عنوان متغیری با اهداف عمومی نیز شناخته میشود. در زبان C توابع malloc() و calloc() برای برگرداندن متغیرهای Void یا عمومی استفاده میشوند. در این مطلب از مجله فرادرس برای اینکه ببینیم Void در برنامه نویسی چیست، از دو زبان C و جاوا اسکریپت مثال خواهیم زد.
Void در برنامه نویسی چیست؟
الان، طبق مطالب گفته شده در بالا میدانیم که تعریف Void در برنامه نویسی چیست. Void یکی از متغیرهایی هست که در زبان C استفاده میشود. البته از متغیر Void در سایر زبانها مانند ++C و #C و Java و چند زبان دیگر نیز استفاده میشود. همینطور که نام تابع پیشنهاد میدهد - Void به معنای پوچ و خالی است - کلمه Void به توخالی بودن متغیر اشاره میکند. بنابراین، میتواند آدرس هر نوع داده دیگری در برنامه را در خود نگهداری کند. سپس این متغیرهای حاوی آدرس را میتوان به روش بسیار سادهای به سایر نوعهای داده منسوب کرد.
به همچنین متغیرهای خالی، تخصیص حافظه نیز به سادگی امکانپذیر میشود. به همین دلیل است که این نوع متغیرها میتوانند به اندازه کافی توابع را انعطافپذیر کنند. در نتیجه توابع نیز به راحتترین شکل ممکن از حافظه استفاده میکنند.
علت استفاده از Void در برنامه نویسی چیست؟
همانطور که میدانیم، آدرسی که به هر متغیری اختصاص داده شده باید همان نوع دادهای را داشته باشد که در زمان تعریف متغیر مشخص کردهایم. برای مثال، بعد از تعریف متغیر Float، این متغیر فقط میتواند به متغرهای حاوی مقدار Float اشاره کند. امکان اشاره به مکان متغیرهای نوع داده Integer یا سایر نوعهای داده برای این متغیر وجود ندارد. با هدف رفع این محدودیت، از متغیر «پوچ» (Void) برای ایجاد انعطافپذیری در اشاره به سایر انواع متغیرها استفاده میکنیم.
به صورت کلی میتوان متغیر Void را در توابع نیز استفاده کرد. زیرا این متغیر میتواند به هر نوع دادهای اشاره کند. هر کسی میتواند هر نوع دادهای را به متغیر Void اختصاص دهد و بعد از آن میتوان متغیر Void را دوباره به نوع متغیر دیگری چسباند، بدون اینکه نیازی به نقشدهی صریح به متغیر داشته باشیم. بنابراین شاهد کاهش پیچیدگیهای کد با استفاده از متغیر Void هستیم.
افزایش توانایی های کدنویسی با فرادرس
تکنیکهایی وجود دارند که برای افزایش تواناییهای کدنویسی باید با آنها آشنا شویم. تکنیکها و مفاهیم برنامهنویسی توان توسعهدهندگان را برای تولید برنامههای قدرتمند، پایدار و سبک افزایش میدهند. به عنوان یکی از روشهای خوب برای آموختن کدنویسی میتوان از شرکت در کلاسهای حضوری نام برد. اما باید توجه کرد در کلاسهای آکادمیک مشکلاتی وجود دارند که معمولا باعث کندی روند آموزش میشوند.
مشکلاتی مانند موارد فهرست زیر حتی میتوانند قبل از شروع، فرایند یادگیری را مختومه کنند.
- قدیمی بودن روش تدریس
- هزینه بالا
- ریسک پایین بودن کیفیت آموزش
- چهارچوب زمانی خشک و مشخص
- و غیره
در نتیجه پیدا کردن کلاسی که با زمان آزاد علاقهمندان به یادگیری، هماهنگ و از لحاظ هزینه مقرون به صرفه باشد، در عین حال کیفیت آموزشی خوب را هم تضمین کند کمی دشوار است و باید به فکر راه حل بود.
- فیلم آموزش رایگان اصول و مبانی برنامه نویسی فرادرس
- فیلم آموزش رایگان پایتون، برنامه نویسی سریع و آسان در ۱۴۰ دقیقه فرادرس
- فیلم آموزش برنامه نویسی پایتون دوره مقدماتی فرادرس
- فیلم آموزش برنامه نویسی C++ در فرادرس
- فیلم آموزش گیت Git، گیت هاب و گیت لب به صورت رایگان در فرادرس
کاربرد متغیر Void در زبان C
از آنجا که متغیرهای Void در زبان C میتوانند به هر نوع دادهای اشاره کنند، برای ساخت توابع عمومی کمک خیلی زیادی میکنند. به متغیر Void میتوانیم آدرس هر نوع دادهای را اختصاص دهیم. به همچنین بدون نیاز به تعریف مجدد میتوانیم این متغیر را به نوع داده دیگری تخصیص دهیم.
الگوریتم پایه
در این بخش روش کار متغیرهای Void را در برنامه زبان C، توضیح میدهیم. در بخش پایین شبه کدی را نمایش دادهایم. این شبه کد مربوط به برنامهای است که در بخش بعدی نمایش داده شده.
- شروع
- تعریف متغیر v و مشخص کردن اینکه از نوع داده Int است.
- مقدار دهی اولیه v با کد v = 7
- تعریف متغیر w و مشخص کردن اینکه از نوع داده float است.
- مقدار دهی اولیه w با کد w = 7.6
- متغیر u را به عنوان متغیر void تعریف میکنیم.
- مقداردهی اولیه متغیر u با متغیر v
- متن « = The Integer variable in the program is equal to» را در خروجی چاپ کنیم.
- مقدار متغیر v را با استفاده از متغیر u چاپ میکنیم.
- متغیر u را با متغیر w مقداردهی میکنیم.
- متن « = The Float variable in the program is equal to» را در خروجی چاپ کنیم.
- مقدار متغیر w را با استفاده از متغیر u چاپ میکنیم.
- پایان
کد مثال
در کد زیر نگاهی به روش استفاده از متغیر void
میاندازیم. این کد رفتار توصیف شده در شبه کد بالا را پیادهسازی میکند.
1#include<stdlib.h>
2
3int main() {
4
5int v = 7;
6
7float w = 7.6;
8
9void *u;
10
11u = &v;
12
13printf(“The Integer variable in the program is equal to = %d”, *( (int*) u) );
14
15u = &w;
16
17printf(“\nThe Float variable in the program is equal to = %f”, *( (float*) u) );
18
19return 0;
20
21}
خروجی که از این برنامه بدست میآید به صورت زیر به کاربر نمایش داده میشود.
The Integer variable in the program is equal to = 7 The Float variable in the program is equal to = 7.600000
در ادامه به بررسی مثالهای بیشتری درباره روش کار با متغیر Void در زبان C انداختهایم.
در مثال اول از متغیر void برای نمایش عددی از نوع داده Integer استفاده کردهایم.
1#include<stdio.h>
2
3int main()
4
5{
6
7int b = 52;
8
9void *p = &b;
10
11printf(“%d”, *(int *)p);
12
13return 0;
14
15}
خروجی حاصل از اجرای کد بالا به صورت زیر است.
52
در مثال دوم از متغیر void در محاسباتی با نوع داده Integer و لیست استفاده کردهایم.
1#include<stdio.h>
2
3int main()
4
5{
6
7int a[3] = {5,9,7};
8
9void *p = &a;
10
11p = p + sizeof(int);
12
13printf(“%d”, *(int *)p);
14
15return 0;
16
17}
خروجی حاصل از اجرای کد بالا به صورت زیر است.
9
کدهای این بخش به زبان C نوشته شدهاند. زبان C یکی از قدیمیترین و در عین حال قویترین زبانهای برنامهنویسی است. در صورتی که با این زبان آشنایی ندارید و علاقهمند به مطالعه این زبان هستید، با مطالعه مطلب راهنمای مقدماتی درباره آموزش زبان C همراه با یک پروژه ساده از مجله فرادرس به شکل خلاصه و مفید میتوانید اطلاعات بسیار ارزشمندی را درباره شروع کار با این زبان برنامهنویسی پیدا کنید.
در مثال سوم از متغیر voidبه صورت ترکیبی استفاده کردهایم.
1#include<stdio.h>
2
3void main()
4
5{
6
7char i=’c’;
8
9float k=13.8;
10
11int j=17;
12
13void *n;
14
15n=&a;
16
17printf(“n%c”,*((char*)n));
18
19n=&k;
20
21printf(“n%f”,*((float*)n));
22
23n=&j;
24
25printf(“%d”,*((int*)n));
26
27}
خروجی حاصل از اجرای کد بالا به صورت زیر است.
c 3.800000 17
کاربرد متغیر Void در زبان جاوا اسکریپت
عملگر Void عبارت داده شده را ارزشیابی میکند و سپس مقدار تعریف نشدهای را برمیگرداند. در ابتدا به کدهای زیر توجه کنید تا روش تعریف و تفاوتهای جزئی آن را با زبان C ببینید.
زبان جاوا اسکریپت یکی از زبانهای پرطرفدار و قدرتمند در بازار کار برنامهنویسی است. فیلم آموزش پروژه محور درباره پیاده سازی سبد خرید فروشگاهی با JavaScript از وبسایت آموزشی فرادرس که در لینک زیر هم قرار داده شده یکی از بهترین آموزشها برای یادگیری تکنیکهای مربوط به سناریوهای دنیای واقعی برنامهنویسی است.
کدهای زیر را با زبان برنامه نویسی جاوا اسکریپت نوشتهایم.
1const output = void 1;
2console.log(output);
3// Expected output: undefined
4
5void console.log('expression evaluated');
6// Expected output: "expression evaluated"
7
8void (function iife() {
9 console.log('iife is executed');
10})();
11// Expected output: "iife is executed"
12
13void function test() {
14 console.log('test function executed');
15};
16try {
17 test();
18} catch (e) {
19 console.log('test function is not defined');
20 // Expected output: "test function is not defined"
21}
سینتکس استفاده از عملگر void در جاوا اسکریپت به شکل زیر است.
1void expression
تعریف
این عملگر امکان ارزیابی عبارتها را فراهم میکند. در بعضی از موقعیتها برگرداندن نتیجه تعریف نشده undefined توسط عبارتها دور انتظار نیست. در چنین موقعیتهای عملگر void امکان ارزیابی عبارتهایی را فراهم میکند که در خروجی مقدار تولید میکنند.
عملگرهای Void بیشتر اوقات فقط برای بدست آوردن مقادیر اولیه تعریف نشده بهکار برده میشوند. معمولا هم از عبارت void(0) استفاده میکنند. عبارت void(0)معادل با عبارت void 0 است. در این موارد، در زبان جاوا استکریپت از متغیر سراسری undefined استفاده میشود.
باید توجه کنیم که تقدم عملگر Void حتما در نظر گرفته شود. وضوح عبارتی که عملگر Void را دنبال میکند، میتوان با استفاده از پرانتزها، افزایش داد. درباره روش اختصاص تقدم به عملگر Void در کدهای زیر مثال سادهای را پیادهسازی کردهایم.
1void 2 === "2"; // (void 2) === '2', returns false
2void (2 === "2"); // void (2 === '2'), returns undefined
مثال ها
در این بخش چند مثال مختلف درباره کاربرد کلمه کلیدی Void در زبان برنامهنویسی جاوا اسکریپت را نمایش داده و با ارائه کدهای مرتبط به صورت شفاف توضیح دادهایم.
عبارت های تابعی فراخوانی شده در سریع ترین زمان ممکن
اگر برای افزایش سرعت از عبارات تابعی فراخوانی شده استفاده کنیم، کلمه کلیدی function نمیتواند بلافاصله در شروع عبارت قرار بگیرد. زیرا ممکن است که توسط زبان جاوا استکریپت به عنوان عملیات تعریف تابع، در نظر گرفته شود. پس وقتی به پرانتزهایی که نشاندهنده فراخوانیاند رسیدیم، خطای مربوط به سینتکس تولید خواهد شد. اگر تابع نامگذاری نشده و کدها به عنوان عملیات تعریف تابع تشخیص داده شوند، بلافاصله خطای مربوط به سینتکس در کدها اعلام میشود.
در کد زیر نمونهای از پیادهسازی کدهای منجر به ظهور این خطا را نمایش دادهایم.
1function iife() {
2 console.log("Executed!");
3}(); // SyntaxError: Unexpected token ')'
4
5function () {
6 console.log("Executed!");
7}(); // SyntaxError: Function statements require a function name
برای اینکه تابع به عنوان عبارت تحلیل شود باید قواعد فهرست زیر را رعایت کنیم.
- کلمه کلیدی function باید در موقعیتی ظاهر شود که فقط عبارتها را قبول کند نه دستورات را.
- هدف بالا با قراردادن عملگر یگانهای که فقط عبارتها را به عنوان عملوند میپذیرد در جایگاه پیشوند کلمه کلیدی به دست میآید.
- فراخوانی توابع اولویت بالاتری نسبت به عملگرهای یگانه دارد. بنابراین در ابتدا عملیات فراخوانی اجرا میشود.
- مقدار برگشتی این تابع تقریبا بیشتر اوقات هیچ مقداری نیست یا تعریف نشده undefined است. این مقدار برگشتی به عملگر یگانه ارسال میشود و بعد از آن بلافاصله کنار گذاشته میشود.
«عملگر یگانه» (Unary Operator): به عملگرهای تک عملوندی میگویند. عملگرهایی که فقط یک عملوند میپذیرند بر روی آن عملوند، عملیات اجرا کرده و در همان مقدار جایگزین میکنند.
در میان همه عملگرهای یگانه، void واضحترین بار معنایی را دارد. عملگر voidبه این مطلب اشاره میکند که مقدار برگشت داده شده از تابع فراخوانی شده باید نادیده گرفته و حذف شود.
1void function () {
2 console.log("Executed!");
3}();
4
5// Logs "Executed!"
این تکنیک کمی طولانیتر از بستهبندی عبارات تابع درون دو پرانتز است. البته با اطمینان از این نکته که کلمه کلیدی function در ابتدای عبارت قرار گرفته است بهجای اینکه در ابتدای دستور قرار بگیرد، هر دو روش خروجی یکسانی تولید میکنند.
1(function () {
2 console.log("Executed!");
3})();
URI-های زبان جاوا اسکریپت
وقتی که مرورگری یکی از URI-های زبان جاوا اسکریپت را دنبال میکند، در ابتدا همه کدهای درون URI را ارزیابی کرده و سپس محتویات درون صفحه را با مقادیر برگشت داده شده جایگزین میکند. مگر اینکه مقدار برگشت داده شده از نوع undefined باشد.
از عملگر void میتوان برای برگرداندن مقدار undefined استفاده کرد.
برای مثال، در کدهای زیر از عملگر voidبرای برگرداندن مقدار undefined استفاده کردهایم.
1<a href="javascript:void(0);">Click here to do nothing</a>
2
3<a href="javascript:void(document.body.style.backgroundColor='green');">
4 Click here for green background
5</a>
توجه کنید که استفاده از شبه پروتکل جاوا اسکریپت در مقایسه با سایر گزینهها مانند کنترل کنندههای رویداد ساده توصیه نمیشود.
توابع Arrow
توابع Arrow در جاوا اسکریپت، شکل سینتکس کوتاه و بدون پرانتزی را تعریف میکنند که عبارتی را برمیگرداند.بعضی از اوقات، عبارت درون عملگر void، فراخوانی تابعی است که در آن مقدار برگشت داده شده از نوع undefined به نوع دیگری تغییر میکند. این مسئله میتواند باعث بروز تاثیرات جانبی غیر عمدی شود.
برای مثال، در کد زیر، اگر تابع doSomething() در خروجی مقدار false برگرداند. وقتی که بر روی checkbox کلیک شود، checkbox دیگر به عنوان تیک خورده یا تیک نخورده علامتگذاری نخواهد شد. برگرداندن مقدار false از کنترلگر رفتار پیشفرض را غیر فعال میکند.
1checkbox.onclick = () => doSomething();
کد بالا نتیجه خطا میدهد. بعید است که این رفتار در کدها مورد نظر برنامهنویس باشد.
به عنوان مثال در زمان کار با تغییر دادن API-ها، وقتی که نیازی به استفاده از مقدار برگشتی توسط تابع نیست، استفاده از عملگر void برای دور انداختن آن رفتار بسیار خوبی است. این تکنیک از بروز تغییرات ناخواسته در رفتار برنامه مخصوصا در زمان کار با توابع Arrow، جلوگیری میکند. به عنوان مثال برای تغییرات ناخواسته میتوان به هنگامی اشاره کرد که مقدار بازگشتی از تابع شاید به دلیل تغییرات در API دچار تغییر شود.
1checkbox.onclick = () => void doSomething();
چطور بیشتر و بهتر به برنامه نویسی مسلط شویم؟
در مطلب بالا به صورت مفصل در مورد اینکه Void در برنامه نویسی چیست صحبت کردیم، استفاده از متغیر Void یکی از رفتارهای تخصصی در حوزه برنامهنویسی است. از Void تقریبا میشود در هر زبان برنامهنویسی استفاده کرد. ولی مهمترین مطلب این است که در حوزه مورد علاقه خود به تکنولوژیها و مفاهیم آن بخش مسلط باشیم. اگر علاقه دارید به عنوان یک برنامهنویس تحلیلگر داده، متخصص هوش مصنوعی و غیره مهارت خود در زمینه برنامهنویسی را افزایش دهید، فیلمهای آموزشی فرادرس میتوانند در این زمینه به صورت قابل توجهی کمک کنند.
آموزشهایی که فیلمهای مربوط به آنها را در این بخش معرفی کردهایم، جزو آموزشهای سطح بالای برنامهنویسی هستند. در صورت تمایل با کلیک بر روی تصویر بالا وارد صفحه اصلی این مجموعه آموزش شده و آموزشهای بیشتر در سطوح مختلف را تماشا کنید.
- فیلم آموزش برنامه نویسی پیشرفته شی گرایی در C++ فرادرس
- فیلم آموزش «جاوا اسکریپت» (JavaScript) فرادرس
- فیلم آموزش کاربردی برنامه نویسی سی شارپ فرادرس
- فیلم آموزش برنامه نویسی پایتون پیشرفته همراه با ترفندهای Python فرادرس
جمع بندی
در این مطلب از مجله فرادرس درباره متغیر Void در برنامهنویسی صحبت کردیم. در ابتدا فهمیدیم که Void در برنامه نویسی چیست و به چه علتی از Void استفاده میکنند. Void در زبانهای گوناگونی مانند ++C و #C و Java و چند زبان دیگر مانند C و جاوا اسکریپت استفاده میشود. در این مطلب از دو زبان آخر برای پیادهسازی مثالها استفاده کردیم. حتی در زبانهایی مانند زبان برنامه نویسی پایتون که Void را به صورت تعریف شده ندارند هم میتوان با استفاده از ماژولهای مخصوصی از عملکردی شبیه به Void استفاده کرد.
متغیر Void برای مدیریت توابع و عملگرهایی بهکار میآید که نباید دادهای از آنها به بیرون برگردد. البته در زبانهای مختلف کارکردهای متفاوتی دارد که هر کدام جزئیات مخصوص به خود را دارند. با مطالعه درباره این متغیر در زبان تخصصی خودتان میتوانید مهارت خود را بهخوبی در پیداکردن راه حلها خلاقانه برای مسائل گسترش دهید.