یکی از مهارت‌های خیلی مهم در دنیای امروز کدزنی و برنامه‌نویسی کامپیوتر هست و یادگرفتن آن بر هر کسی واجب است.

اگر با مدل سیستم 1 و 2 کانمن و تورسکی به موضوع نگاه کنیم، سیستم 1 مغز، که انرژی کمتری رو مصرف می‌کنه و به صورت ناخودآگاه تصمیم می‌گیره اهمیت این موضوع رو به راحتی درک می‌کنه، و دلیل آوردن و طومار نوشتن در مورد اهمیت کدزنی جز اضافه‌گویی برای توجیه آن چیزی بیشتر نیست. مثل این می‌مونه که بیایم راجع به اهمیت یادگیری زبان انگلیسی در دنیای امروز صحبت کنیم.

دلم می‌خواد سری مطالبی رو در رابطه با کدزدن در این وبلاگ شروع کنم به نوشتن.

 به این خاطر که بهم کمک می‌کنه کدزنی رو یاد بگیرم و در عین حال کد زدن و برنامه‌نویسی رو یکی از مهارت‌های کلیدی برای پیشرفت کاری و بهتر شدن این وبلاگ می‌دونم.

به نظرم وبلاگ‌نویسی یکی از بهترین روش‌هایی هست که می‌تونه توجهم رو روی این موضوع نگه داره. و یادگیری هر چیزی به معنای توجه کردن به آن موضوع در مدت زمانی طولانی هست. و چه راهی بهتر از وبلاگ نویسی برای این‌کار.

خواندن این مطلب شاید برای شما خسته‌کننده و غیرمفید باشه، چون هم منابع خیلی بهتر و کاربردی‌تری در سرتاسر فضای وب وجود داره، به خصوص که توسط افراد متخصص و باتجربه‌تری نوشته شده. و هم اینکه برای اجتناب از سرنوشت انسان‌های ازگورگریخته می‌خوام در این باره بنویسم.

برای برنامه‌نویسی در دسترس بودن ابزار برنامه‌نویسی رو در اولویت قرار دادم. یکی از دسترس‌ترین ابزارها برای برنامه‌نویسی فایل‌های متنی مثل نوت‌پد و تِکست یا اِکسل هست. پس تمرکز خودم رو می‌خوام روی این دو محیط بگذارم.

برای شروع می‌تونیم یک فایل جدید text یا notepad رو باز کنیم. 

مثلا اگر بخوایم برنامه‌ای بنویسیم که شماره 1 یا 2 رو بگیره که مربوط به مشخصات 2 نفر به نام‌های 1: علی و 2: پگاه می‌شه و آدرس این افراد را به ما نشان بده و سپس با پرسیدن سال تولد و گرفتن جواب از کاربر (به فرمت 4 رقمی: مثلا 1366)، سن آن‌ها را به ما برگرداند می‌تونیم متن زیر را در نوت‌پد بنویسیم.

varchoice = inputbox("Enter the number: 1 or 2")

select case varchoice

          Case "1"

          msgbox "Ali's address is Vali-Asr street."

          a= inputbox("Enter the Ali birth year (Ex: 1374):")

          msgbox "Ali is " & 1397-a & " year old."

          Case "2"

          msgbox "Pegah's address is Shariati street."

          b= inputbox("Enter the Pegah birth year (Ex: 1339):")

          msgbox "Pegah is " & 1397-b & " year old."

          case else

          msgbox "You have entered an invalid option"

end select

وقتی این متن رو در نوت‌پد بنویسیم حتما باید آن را با پسوند vbs. که مخفف visual basic scripting هست، ذخیره کنیم. پسوند رو باید به صورت دستی به انتهای اسم فایل اضافه کنیم.

یادگیری این زبان به ما کمک می‌کند که ماکرونویسی در اکسل را هم یادبگیریم.

دانلود فایل اسکریپت

تفاوت برنامه Program و اسکریپت Script

این تفاوت خیلی برای ما تغییری ایجاد نمی‌کنه.

اسکریپت‌ها شکل محدود شده‌ای از برنامه‌ها هستند. اسکریپت‌ها نیازی به کامپایلر برای اجرا شدن ندارند و خط به خط تفسیر می‌شوند.

چند مثال از زبان برنامه‌نویسی: C, C++, Java, .Net

چند مثال از زبان اسکریپت: Java Script, VB Script, Shell Script

در برنامه‌ی بالا از چه فرمان‌های استفاده شده است؟

رنگ‌های مشابه در برنامه بالا مربوط به 4 قسمت زیر می‌شوند.

1. msgbox:

برای نمایش پیام‌ها و همچنین ایجاد منوهایی که از قبل طراحی شده‌اند از این دستور استفاده می‌شود.

2. inputbox:

برای گرفتن ورودی‌ها از کاربر از این فرمان استفاده می‌شود.

3. متغیرها variables: متغیرها می‌توانند مقادیر مختلف را در خود ذخیره کنند. مثلا خروجی تابع MsgBox در اسکریپت بالا در متغیر varchoice ذخیره می‌شود.

4. دستور select case: یکی از روش‌های هست که می‌توان با آن از دستورهای شرطی استفاده کرد.

با دونستن همین‌ها کارهای زیادی رو می‌شه انجام داد. در این مطلب می‌خوام راجع به تابع MsgBox بنویسم.

تابع msgbox:

با استفاده از این دستور می‌توان پیامی را بر روی صفحه‌ی نمایش نشان داد و منویی را ایجاد کرد و منتظر جواب کاربر با انتخاب یکی از گزینه‌های مورد نظر شد.

فرمت این دستور به صورت زیر است:

Value = MsgBox(Object, MsgBoxStyle, Object)

با دادن ورودی‌ها درست به تابع MsgBox، خروجی را به صورت یک عدد برمی‌گرداند و می‌توان این عدد را در متغیر Value برای استفاده‌های آتی ذخیره کرد. 

ورودی اول تابع MsgBox: Object

متن مورد نظر خود برای نمایش را باید به جای ورودی اول وارد کنید.

متن‌ها یا استرینگ‌ها حتما باید بین دو علامت نقل قول (متن مورد نظر) قرار بگیرند. این تنها ورودی لازم برای تابع MsgBox است و ورودی‌های دیگر اختیاری هستند. اگر تنها همین ورودی برای شما مورد نیاز هست می‌تونید آن‌ها را بدون پرانتز به تابع اعمال کنید. یعنی:

MsgBox(“Hello”)

MsgBox “Hello”

هر دو درست هستند.

اگر شما بخواهید متن‌های مختلف رو با هم ترکیب کنید یا ترکیبی از نمایش عدد و متن رو ایجاد کنید برای متصل کردن می‌توانید از علامت امپرسند & یا بعلاوه + استفاده کنید.

MsgBox “This value is” + TestValue

همچنین توابعی مثل (left(string,digit و (mid(string,digit و (right(string,digit  می‌تونند تعداد مشخصی از کاراکترهای یک استرینگ رو به از چپ، یا راست یا وسط برای شما جدا کنند. یا تابع (len(string می‌تونه طول یک استرینگ رو به شما نشون بده. برای تبدیل مقادیر عددی به رشته‌ها از تابع (str(num و برای تبدیل استرینگ به مقادیر عددی از تابع val(string) می‌توان استفاده کرد.

فاصله Space - ویژوال بیسیک از فاصله space های اضافه صرف نظر می‌کنه. مثلا اگر بعد از علامت بعلاوه 2 تا فاصله بگذارم یا یکی تفاوتی ایجاد نمی‌شه. فاصله‌ها می‌تونند به خوانا شدن متن برنامه کمک کنند.

کدهای ASCII اگر بخواهید در متنی که می‌نویسید به خط بعدی برید یا بعضی از کارکترهای خاص رو در متن اضافه کنید باید کد اَسکی کاراکتر مربوطه را از تابع Chr(#) رد کنید.

مثلا:

رفتن به خط جدید: Chr(10)،        دکمه اینتر: Chr(13)

فاصله تَب Tab: Chr(9)،              فاصله Space: Chr(32)

نقل قول دوتایی ": Chr(34)           نقل قول تکی : Chr(30)

گذاشتن کامنت - اگر شما در ابتدای یک دستور علامت نقل قول تکی رو بگذارید اون فرمان به صورت یک کامنت در نظر گرفته می‌شه و توسط برنامه خونده نمی‌شه. برای همین لازم می‌شه که شما از کد اسکی کاراکتر مورد نظر استفاده کنید.

مثلا اگر بخوایم بگیم علی می‌گه که کتابش 300 صفحه داره باید اون رو اینجوری به زبون کامپیوتر بنویسیم:

Number = 300

MsgBox"Ali says: " & Chr(10) & Chr(34) & "The book has " & Number & " Pages." & Chr(34)

فایل باید با پسوند vbs. ذخیره بشه و بعد از اجرا متن زیر به نمایش در میاد:

نوشتن استرینگ در وِیژوال بیسیک اسکریپت

ورودی دوم MsgBox: دکمهها Buttons یا MsgBoxStyle

دومین ورودی به تابع MsgBox باید به صورت یک عدد باشه و هر عدد مشخص کننده یک نوعی خاصی از منو هست که قبلا طراحی شده است. 

مثلا اگر دکمه‌های Ok و Cancel رو بخواید باید عدد 1 رو وارد کنید. یا اگر دکمه‌های Yes و No رو بخواید باید عدد 4 رو وارد کنید.  یا دکمه‌ی Yes و No و Cancel رو بخواید باید عدد 3 رو وارد کنید. منوهای دیگه رو هم می‌تونید از این لینک ببینید. 

ورودی MsgBox

سپس کاربر با انتخاب هر کدام از دکمه‌ها باعث می‌شود که تابع MsgBox مقدار مشخصی را برگرداند. مثلا با انتخاب دکمه Ok مقدار خروجی تابع 1 خواهد شد و با انتخاب دکمه Cancel مقدار خروجی تابع 2 خواهد شد. یا با انتخاب دکمه Yes مقدار خروجی تابع 6 خواهد شد و با انتخاب دکمه No مقدار خروجی تابع 7 خواهد شد.

مثلا من می‌خوام بپرسم که آیا دوست دارید که ماکروها رو یاد بگیرید. می‌تونیم بنویسیم:

Value = MsgBox ("Do you like to learn macros?", 4)

select case value

            Case "6"

            MsgBox "So let's continue <3"

            Case "7"

            MsgBox "Maybe another time! :)"

end select

دانلود اسکریپت 

پس تابع MsgBox بر اساس ورودی‌هایی که بهش می‌دیم منوی خاصی رو برای ما درست می‌کنه و سپس کاربر با انتخاب دکمه‌ی مورد نظر باعث می‌شه که تابع خروجی خاصی را به صورت عدد به ما برگردونه.

خروجی‌های تابع MsgBox به ازای دکمه‌های مختلف عددهای زیر هستند.

خروچی MsgBox

ورودی سوم تابع MsgBox: Object

ورودی سوم هم به مانند ورودی اول باید یک متن یا استرینگ باشد که بین دو علامت نقل قول "متن مورد نظر" قرار می‌گیرد و عنوان منوی ساخته شده را مشخص می‌کند.

مثلا:

Value = MsgBox ("That's enough for the MsgBox", 0, "Visual Basic Scripting")

وقتی تابع MsgBox بیش از یک ورودی دارد حتما لازم هست که متغیری تعریف کنیم که مقدار تابع به آن متغیر اختصاص داده شود که در اینجا این متغیر Value است. مقدار Value برابر 1 خواهد شد چون با انتخاب Ok تابع مقدار 1 را بر می‌گرداند.

می‌بینید که عنوان منو به Visual Basic Scripting تغییر کرده است.

عنوان منو MsgBox

ورودی‌های بیشتری را هم می‌توان به تابع MsgBox داد که خیلی به کار نمیاند.

پینوشت: به نظرم فقط با دانستن دستورهای MsgBox، InputBox، و متغیرها و همچینن استفاده از جملات شرطی کارهای خیلی زیادی رو می‌شه انجام داد. 

نوشتن به زبان فارسی در تابع MsgBox راحت نیست به این خاطر که فایل‌های متنی ساده برای دو زبانه نوشتن خوب نیستند. برای اینکار لازم هست که ورودی دوم تابع رو  به عدد 1048576 تغییر بدیم.

4