فصل1_بخش دهم : ورودی و خروجی ها(input and output)

برنامه ای که نوشته می شود که فقط در محیط Console اجرا شود می گوییم :Console application

برنامه ای که فقط روی دسکتاپ اجرا می شود به ان می گوییم:Desktop application

Windows form application بیشتر در سی شارپ کاربرد دارد. Google Chorom حالت ویندوز فرمی دارد. با کاتلین هم می توان برنامه ویندوز فرمی نوشت .

ولی ما تلاش می کنیم اصول اساسی کاتلین را بیاموزیم و بیشتر در محیط کنسول باشیم و سپس روی اندروید متمرکز می شویم.

Out put یا همان خروجی()println و سایر موارد است که اطلاعات ما را در کنسول چاپ می کند .

printlnمخفف printLineیعنی هرجه چاپ می کند در اول خط بعدی قرار می دهد.

تعریف Intellisense:به پنجره ای که در زبان برنامه نویسی به ما کمک می کند تا اجزای برنامه مان را کامل کنیم ( زمانی که بخشی از حروف کلمات کلیدی را نوشته ایم و به صورت لیست وار برایمان می اید)

در Intelisense بیشتر مواقع over loade های کلمات کلیدی برایمان می اید .

over loade چیست؟ در شی گرایی بیشتر صحبت می شود اما این نکته را بدانید over loade بین دو Interface یا class file (abstraction) یا دو class file معمولی یا یک class file و fileمعمولی اتفاق می افتد که حالت دسترسی ان ها inhearient (پدر _ فرزندی )باشد .و هدف از اوردن ان در زبان برنامه نویسی روان تر کردن کار برنامه نویسان از طریقPolymorphism(چند ریختی )می باشد .

بک اسلش n یا همان n\ در زبان کاتلین بین چند بخش از یک رشته String بیاوریم باعث می شود هنگام چاپ کردن ان هر بخش که این عبارت مذکور را اوردیم ,بعد از ان به اول خط منتقل شود .

ورودی یا همان(input):

از کلید واژه های()readln و ()readlnOrNull و ()readLine می توان ورودی از کاربر دریافت کرد که عبارت اول String به ما می دهد و عبارت دوم و سوم

?String که منظور از علامت سوال بعد از ان nullable بودن ان است یعنی می تواند مقدار null(هیچی)نیز دریافت کند .

لطفا با input و output گرفتن برنامه زیر را که به صورت فارسی نوشته شده در کاتلین بنوسید :

شرح برنامه:

لطفا نام خود را وارد کنید :(خروجی)

(نام را به عنوان متغییر تعریف کرده و مساوی با ()readln می گذارید ) :(ورودی) نام به عنوان مثال خسرو می باشد .

خسرو ی عزیز , لطفا نام محصول مورد نظر را وارد نمایید .(خروجی )

(مشابه ورودی قسمت اول عمل می کنیمول الان به جای نام به عنوان اسم متغییر محصول را جایگزین می کنیم ) :(ورودی ) محصول به عنوان مثال انجیر

خسروی عزیز چند کلیو انجیر برداشته اید(خروجی )

(ورودی) مانند روال قبل :به عنوان مثال 4

قیمت هر کیلو انجیر چند تومان است ؟(خروجی)

(ورودی)مانند روال قبل : به عنوان مثال 120,000

حلا به عنوان تکمیل کد یک متغییر به نام calculate می اوریم که مقدارش مساوی شود با حاصل ضرب دو ورودی قبلی

مجموعه مبلغی که باید پرداخت کنید 480,000 تومان است .

طبق روال همیشه اول خودتان کد را بنویسید سپس به دو تصویر زیر نگاه کنید

تصویر مربوط به file.kt مربوطه

>
تصویر مربوط به کنسول فایل کاتلین

فصل 1_ بخش نهم :project(یک پروژه برای تمرین)

یک پروژه جدید بسازید و در آن چند متغییر تعریف کنید و اطلاعات زیر را در آن ها بریزید. سپس در کنسول تک تک موارد را چاپ کنید.

1_ نام و نام خانوادگی :2 متغییر رشته ای

2_ سن (عدد)

3_ وضعیت تاهل (Boolean)

4_ سال تولد (عدد)

5_ شغل (رشته ای) ( کارمند، دانشجو، مسئول فنی...)

6_ زبان مادری (رشته ای)

لطفا، لطفا، لطفا :ابتدا IntelliJ IDEA خود را باز کنید پروژه بالا را انجام دهید سپس به دو عکس زیر نگاه کنید.

>
تصویر مربوط به کد های مربوطه در محیط (kt.file)Intelij Idea
>
تصویر کنسول مربوطه

فصل1_ بخش هشتم : Variable's Scope(محدوده متغییر ها )

هر متغییر در محدوده و قلمرو خود معتبر است .

که قلمرو ها در kotlin fille(Kt.file) ها به دو دسته قلمرو سراسری یا Global (گلوبال) و قلمرو های داخل بدنه ی fun main , fun main2 , fun main 3, ... تقسیم بندی

می شوند.

و اگر متغییر هم نام در قلمرو سراسری در یکی از main ها نباشد و خروجی تمام قلمرو ها متغییر مذکور باشد . هیچ Error داده نخواهد شد بلکه متغییر گلوبال در Scope ای که فاقد متغییر مذکور می باشد چاپ خواهد شد .

این مثالی که الان می گویم به درک این موضوع کمک خواهد کرد :

در روستایی به دلیل عدم رعایت مسائل معماری ساختمانی یک ده بزرگ دچار مصرف بیش اندازه انرژی گرمایشی در زمستان می شود . حالا اگر این روستا دهیار داشته باشد مسئله کاملا حل می شود و دهیار خود اقدام به تهیه پشم شیشه کرده و به مرور ساختمان ها را عایق گرما و سرما خواهد نمود . (مثالی که در مورد main هایی که دارای متغییر هم نام متغییر گلوبال هستند .)

حال اگر روستای مد نظر دهیار نداشته باشد این موضوع به استانداری می رود و اگر برای استانداری قابل حل نباشد به مرانب بالا تر خواهد رفت تا جایی که حل می شود و به اصطلاح به ان می گوییم مشکل سراسری Global حل می شود .(مثالی بود در مورد تنها main ای که فاقد متغییر هم نام با متغییر سراسری می باشد )

قلمرو ها در کاتلین کلاس(kt.Class)به یک صورت بیشتر تعریف نمی شوند قلمرو اصلی که در بدنه اصلی نوشته می شود و قلمرو های فرعی که می توانند به صورت تابع تو در تو نوشته شوند و هرکدام از قلمرو قبلی پیروی کند یا به صورت مرتب قلمرو های مختلف از یک نام متغییر کنارهم چیده شوند با بدنه مخصوص به خودشان و تو در تو نباشند .

حالا دو تصویر در محیط Intelij Idea در مورد کاتلین فایل ها بارگذاری خواهم کرد .

و یک تصویر هم در همین محیط در مورد کاتلین کلاس ها بارگذاری می کنم .

دو تصویر اول :

>
kt.file

>
console from kt.file

یک تصویر مربوط به کاتلین کلاس :

>
kt.Class

فصل1_بخش هفتم : استاندارد نام گذاری متغییر ها

نکته بسیار مهم : از یک حرف انگلیسی برای نام گذاری متغییر استفاده نکنید حتی از خلاصه نویسی بپرهیزید مگر اینکه از لغت کلیدی شناخته شده استفاده کنید مثل : در گوگل ترنسلیت برداشت از حساب بانکی را سرچ کنید و کلمه برداشت را در متن سرچ شده به عنوان نام متغییر بیاورید که می شود:withdrawal

در ادامه می بایست توضیح داد که انواع حروف چینی در زبان برنامه نویسی وجود دارد که در تصویری که مربوط به محیط Intelij Idea است به طور مختصر و واضح نمایش داده خواهد شد و می بایست گفته شود camelCase بیشترین کاربرد را در کاتلین دارد .

سایر استاندارد های نام گذاری :

1 _ هنگام نام گذاری از انگلیسی سلیس استفاده کنید و اگر نام لغت یا کلید واژه ای را نمی دانید می توانید در گوگل ترنسلیت سرچ کنید . و هرگز به فارسی یا فینگلیش لغت یا مجموعه لغات را وارد ننمایید.

2 _ عدد یا اعداد را بین لغت ها و اخر نام متغییر می توانید بیاورید ولی هیچ گاه اول نام متغییر نمی توانید از عدد استفاده کنید .

3 _ از علامت زیر خط در بین لغت ها و اول و اخر نام گذاری متغییر می توانید استفاده کنید .

4 _ از کاراکتر هایی مانند[@و #و %و ,و$و...](کاراکتر های خاص( به جز[ _ ](زیر خط ))نمی توانید استفاده کنید در نام گذاری متغییر .

5 _ همیشه از کلماتی که در کاتلین به کاربرده می شود در نام گذاری متغییر استفاده نکنید این طور نیازی به حفظ کردن کلمات رزو شده در کاتلین هم ندارید و کد بسیار تمیزتری خواهید نوشت.

انواع حروف چینی رایج در زبان های برنامه نویسی

فصل 1_ بخش ششم:اصطلاحات مرتبط با متغییر

در کل پنج اصطلاح مرتبط با متغییر داریم که ابتدا ان ها را معرفی کرده سپس برای نمونه کد برای همه ان ها یک تصویر به اشتراک گذاشته می شود در محیط Intelij Idea

1 _ مقدار دهی اولیه یا (Init) یا (Initialization) یا (Initiate) :که در ابتدا var یا val را قرار داده و با یک فاصله (ُSpace)نام متغییر را اورده سپس در صورت لزوم Data Type را مشخص می کنیم و سپس مقداردهی می کنیم .

2 _تعریف متغییر (Declare) یا (Declaration) یا (Define) : که دقیقا همان کار های بالا (البته تعیین Data Taype اجباری می باشد)به جز مقدار دهی را انجام می دهیم .

3 _ مقدار دهی متغییر (Assignment) یا (Assign): که از متغییری که قبلا (Declare شده)(تعریف شده) استفاده می شود تا تنها مقذار دهی شود.

4 _ تعریف مجدد متغییر (ReDeclaration):یعنی با استفاده از val یا var با همان نام متغییر نوع اش را تغییر داده و در همان نام متغییر اولیه ذخیره اش کنیم که این کار با تعریف و مقداردهی در متغییر جدید امکان دارد ولی در کاتلین در همان متغییر اولیه غیر ممکن است .

5 _ مقدار دهی مجدد متغییر (ReAssign) یا (ReAssignment):می بایست در Int کردن یا Declare کردن متغییر از کلید واژه var استفاده شود تا امکان پذیر بشود .

نکته : پیوستن (Jion)Decraration و Assignmation می شود همان Init کردن متغییر .

>
به طور مختصر توضیح داده شده

>
همانطور که می بیبینید طول رشته مساوی با 2 است که در کنسول چاپ شده

فصل1_بخش پنجم:چهارمین دیتا تایپ(Boolean)و تمرکز روی انواع مبنای عدد ها

دو نکته مربوط به جلسه قبل1 _ :در نوع داده String می توان یک عبارت , یک جمله, یا حتی یک یا چند پاراگراف را جا داد.

2 _ : برای اینکه مجموعه عبارات به جای چاپ شدن خود عبارات اعمال ان ها انجام شود و از قبل در بین دو دابل کوتیشن قرار گرفته اند بایستی ان عبارات را به جای علامت سوال قرار بدهیم [("{?}$")] مانند مثال زیر :("{S.Length=${S.Length")println

نوع داده Boolean دارای دو مقدار false و true می باشد.

که نوع داده Boolean کمترین فضای کامپیوتر را اشغال می کند یعنی یک Bit که false =0 و true=1 می باشد . (این 1 و 0 بیان شده در زبان کامپیوتر است و در زبان کاتلین که زبان سطح 3 می باشد به طور مستقیم کاربرد ندارد . )و اگر یک داده تعریف کنید که مقدارش 1 یا 0 باشد از نوع داده عددی محسوب می شود و همانطور که قبلا گفتم به طور پیش فرض از نوع Int می باشد.

حالا سه تصویر در زیر نمایش می دهیم که اولی فایلی به نام hint.txt است و انواع مبنا های اعداد و چگونگی تبدیل ان ها به عدد ده دهی یا همان اعداد روتین همیشگی که به کار می بریم است .

و تصویر دوم در ()fun mainهمیشگی است و دو متغییر از نوع Boolean تعریف می کنیم .

و تصویر سوم مربوط به ترمینال تصویر دوم است که هردو نوع Boolean را چاپ کرده ایم .

>
انواع مبنا های اعداد (باینری زبان کامپیوتر است)

>
دو متغییر غیر قابل تغییر تعریف شده و مقدارBoolean به ان ها داده شده است .

>
مقدار های Boolean به ترتیب false وtrue چاپ شدند

فصل 1 _ بخش چهارم : (تمرین String نویسی و کمی Int نویسی)

ابتدا چند نکته مهم اضافه می کنم :

نکته‌ یک:برای فهمیدن طول یک String اول آن را تعریف و مقداردهی می کنیم سپس اسم آن متغییر استرینگی را می آوریم و نقطه می گذاریم و عبارت Lengthرا می نویسیم و همه این کارها (آوردن اسم متغییر،یک نقطه تایپ کردن و بلافاصله آن عبارت Length را نوشتن ) را درون پرانتز انجام می دهیم و بلافاصله قبل از آن عبارتprintln را می نویسیم.

نکته دو : برای ساده تر خواندن متغییر های عددی هر سه رقم یکبار از عبارت زیر خط [ _ ] استفاده می کنیم.

مثال :098_064_45

که در مثال بالا فقط مقدار متغییر آورده شده است که هیچ تفاوتی با عدد زیر ندارد فقط خوانایی آن بالا تر است.

45064098

1_ متغییری از جنس غیر قابل تغییر تعریف کنید و نام خود را درون آن بگنجانید و به اسم myName این متغییر را بشناسید.

2_ متغییری از جنس غیر قابل تغییر تعریف کنید و نام خانوادگی خود را در آن بگنجانید و به اسم myFamilyNameاین متغییر را بشناسید

3_ دو متغییر ذکر شده را یکبار جداگانه در دو خط پشت سرهم یکبار سرهم و خوانا و با فاصله در یک خط در کنسول (ترمینال) چاپ کنید.

4_ متغییری تعریف کنید به اسم myAge و از نوعUByte باشد. (از نوع انواع عددی می باشد) از نوع قابل تغییر.

5_ متغییری تعریف کنید به نام information و تمام متغییر های قبلی را( با استفاده از علامت$ بلافاصله بعد از نام متغییر مربوطه) درون آن قرار می دهیم و از نوع String و از نوع قابل تغییر می گذاریم.

6_از متغییر information پرینت بگیرید.

7_ متغییری تعریف کنید که کد ملی تان را درون آن قرار دهید و نام آن را codeNational بگذارید.

8-codeNational را درون پرانتز قرار دهید و جز information بگذارید و از سایر متغییر های قبلی استفاده کنید و همه را درون information قرار دهید.

9_کل information را پرینت بگیرید.

(نکته بسیار مهم):تمامی تکالیف بالا را خودتان قبل از اینکه تصویر زیر نمایش داده شود انجام دهید. تا بتوانیدبرنامه نویس مبتکری بشوید.

>
تقریبا مثل تصویر بالا نوشته باشید موفق هست

>
این هم از تصویر کنسول مربوطه

فصل 1_بخش سوم: (نوع داده کاراکتر     یا    همان  [   Char  ]  )

>
به انگلیسی در محیط Intelij Idea کاملا توضیح داده شده

>
محیط ترمینال (کنسول مربوطه)

باید توضیح دهم اینتلیج مربوط به کامپیوتر من emoji (ایموجی) و symbol(سمبل) ها که در اینترنت سرچ می کردم به سختی می پذیرفت و نهایتا تکی هم به عنوان کاراکتر (Char)نمی پذیرفت و نهایتا من خودم چند تا انتخاب کردم و به عنوان داده به گامادو (به عنوان نام متغییر)تحویل دادم .

بگذارید طبق تصویر پیش برویم :

در اول خط یک متغییر غیر قابل تغییر (چون از کلمه کلیدی [val]استفاده شده )به عنوان [alpha]تعریف کرده ایم .

و دیتا تایپ اش از نوع کاراکتر(Char) انتخاب کرده ایم .

در مورد دیتا تایپ Char نیز باید بگویم که یک عدد از حروف هر زبانی یا یک عدد یک رقمی (0 .. 9 )[صفر تا نه ] یا یک عدد کاراکتر مانند [! , . @ $ % * ( }]( ":?و..] یا یک عدد از کاکتر های خاص مانند ایموجی ها و سمبل ها البته از نوع اخر که ذکر کردم اگر بلد باشید Intelij Idiea خود را از نوع سفارشی سازید .

نکته خاصی که در موردChar باید رعایت کنید که ان را در Single quotation (سینگل کوتیشن)که ان را در کروشه نشان می دهدم و به جای کاراکتر از یک عدد علامت سوال استفاده می کنم ['?']که البته باید حواستان باشد خود اسپیس یک کاراکتر محسوب می شود.

پس نباید هیچ اسپیس اضافه بین دو سینگل کوتیشن قرار دهیم .

در ادامه تصویر از همان نوع غیر قابل تغییر یعنی (val)متغییر beta تعریف کردیم . و beta نیر از نوع Char می باشد .

در ادامه تصویر مشاهده می کنید از نوع قابل تغییر یعنی (var )متغییر gama تعریف کردیم .و موفق شدیم gama را از نوع Char بگذاریم .

در ادامه مشاهده می کنید یک String (رشته) تعریف کردیم که بیشتر از یک کاراکتر را می توانیم بگنجانیم و هر جا که صلاح دیدیم می توانیم با[,] کاما

ان ها را از هم جدا کنیم مهم این است که همه ان ها را در بین دو Double quotation(دبل کو تیشن ) که تقریبا به این صورت است اگر فقط بخواهیم از اعداد استفاده کنیم .[ " 46643 , 464397887 , 98098679 , 754745 "]مشاهده می کنید استفاده از اسپیس هم بسیار مرسوم و بدون اختلال در نوع ان می باشد .

این متغییر همان gama2 درد سر ساز ما می باشد .

در ادامه متغییر رشته ای از نوع غیر قابل تغییر [val]به نام mixed تعریف کردیم که مشاهده می کنید نمامی متغییر های ساخته شده خود را با علامت [$] بلافاصله بعد از نام ان ها بدون حتی یک اسپیس اورده شده و تمامی ان ها در بین دو دبل کوتیشن اورده شده است

نکته :متغییر های قابل تغییر اخرین مقداری که به ان ها داده شده در(mixed) priniln اورده شده . یعنی این را باید در ترمینال Intelij ببینید که در ادامه به انگلیسی نوشته شده بدون هیچ خطایی اجرا شده

******************************************************************************************************************************************************************************************************************

فصل1_بخش دوم :  ((Type  Variable))های متغییر های عددی


می خواهیم در مورد نوع متغییر هایمان یا همان داد ه هایمان صحبت کنیم.

با توجه به مقدار متغییر(Variable)نوع داده ها (Data types) را مشخص می کنیم.

مثلا نام یک گونه از درخت در یک نوع از متغییر رشته ای (String)جا می گیرد.

نکته: حفظ کردن اینکه انواع داده عددی در چه بازه ای قرار می گیرد اصلا کار شایسته ای نیست بلکه با مکث کردن در دومین جدول که در تصویر زیر نمایان

می شود کاملا قابل درک است .

نمایش گنجایش هارد64 ترابایت و انواع داده عددی

نکته:علامت ** همان منظور به توان هرچیزی که بعدش در () گذاشته شده است یا بلافاصله بعد از ان امده است .

مشاهده می کنید که برای اعداد اعشاری کلید واژه [U]نمی توان استفاده کرد .و Float با اینکه 32 bit است هم ردیف با Long 64bit می باشد و جلوتر

می خوانیم چگونه در عملگر ها مقدار Long را نیز پوشش می دهد .

نکته :این نکات این جلسه بیشتر در پروژه واقعی مورد نیاز است وگرنه خود اینتلیج آیدیا شرکتJetBrain برای راحت تر کردن کار همیشه داده های عددی را به صورت پیش فرض Int قرار داده است مگر اینکه آخر عدد [ f ] یا [ F ] بگذارید که تشخیص دهد از نوع Float است یا بعد از عدد .[ 0. ] حداقل بعد از ممیز یک صفر بگذارید متوجه می شود از نوع Double است. سایر مدل ها باید معرفی شوند.

به عنوان نوع داده به عنوان مثال :

val ageMax :UByte =160u

از انحایی که بیشترین سن تغییر نخواهد کرد در برنامه پیش رو ان را با val نمایش می دهیم .

ولی برای کوچکترین سن از var استفاده می کنیم چرا که قابل تغییر است var ageMIN :Byte = 10

البته باید این نکته گنجانده شود که اینتلیج دارای caste. باهوش می باشد (یعنی نوعی هوش مصنوعی صامت)در ادامه گفته صامت یعنی بدون هیجان آوردن کاربر (برنامه نویس) از آن استفاده می کند یا هیجان را به حداقل می رساند مثلا خود من تجربه شخصی دارم که الان ذکر می کنم و به طور ویژه در دو کروشه می گذارم.

[[اینتلیج تشخیص می دهد کاربرد های مختلف را از حروفی که به کار می بریم مثلا خود var و val را همیشه یک رنگ نشان می دهد و اگر به سطح بالاتری حتی شانسی برسید رنگ زیباتری نشانتان می دهد و همیشه عادت دارد که غلط هایی که با import کردن حل می شود را قرمز پر رنگ مایل به سیاه نمایش می دهد]]

****************************************************************************************************

فصل 1_بخش اول: تعریف متغییر (Variable)

باز کردن قضیه((متغییر چیست))

متغییر همان اطلاعات ذخیره شده توسط کاربر(برنامه نویس یا شخص استفاده کننده از برنامه اپلیکیشن که توسط گروه برنامه نویسان ارائه شده) می باشد.

در واقع تعریف بالا یعنی مقدار متغییر.

حالا خود متغییر چیست؟ متغییر را با نام آن می شناسیم که جلوتر در مورد اصول نام گذاری متغییر آشنا می شود.

نوع متغییر چیست؟ متغییر دارای انواعی است که شامل متغییر عددی، کاراکتری، رشته ای و متغییر هایی که در تصمیم گیری ها و حلقه های تکرار نقش دارند (بولین ها)

اطلاعات که توسط متغییر تعریف می شوند می تواند در قسمت هارد ثابت یا پویا ی کامپیوتر ذخیره شود.

بنابراین متغییر دارای سه مشخصه جدایی ناپذیر می باشد که عبارتند از :

1_نام 2_نوع. 3_مقدار

****************************************************************************************************