دنبال کننده و علاقمند برنامه نویسی و معماری نرم افزار، شاغل در سازمان عمومی
یادگیری برنامه نویسی، نوع داده ای در زبانهای مختلف
با سلام، برنامه ساده زیر به زبان پایتون رو از بخش قبل در نظر بگیرید:
a=int(input())
b=int(input())
c=int(input())
print((a+b+c)/3)
این برنامه سه عدد از کاربر گرفته و میانگین آنها را چاپ میکند، حالا فرض کنیم قرار هست برنامه ای بنویسیم که اسمی از کاربر گرفته و آنرا دوبار چاپ کند، در بالا یاد گرفتیم که در زبان پایتون چگونه در محیط متنی عددی از کاربر بگیریم، حالا چطور یک اسم از کاربر بگیریم؟ خب دستور آن در پایتون به این شکل هست:
n = input()
اما با دقت در کدها احتمالاً شما هم حدس زده اید، زبانهای برنامه نویسی رفتار متفاوتی نسبت به یک عدد و یک اسم دارند، (مثلاً در همان نمونه های بالا، اسمها را با یک دستور و اعداد رو با دستور متفاوت تری از کاربر میگیریم) درواقع این همان مفهوم مقادیر داده ای هست، در برنامه نویسی انواع مختلف داده ها وجود دارند که هرکدام استفاده های خاص خودشونو دارند و نسبت به هرکدام ممکن است امکانات و دستوراتی در زبانهای مختلف قرار داده شده باشد، باید بدانیم داده هایی مثل اسم یک شخص یا یک متن در کدام نوع دادهای تقسیم میشوند، یا باید بدانیم یک عدد مثل 3.5 د و یک عدد دیگر مثل 8 در کدام نوع دادهای تقسیم میشوند، و باید بدانیم چه عملیاتی میتوانیم روشون انجام دهیم و چه عملیاتی رو نمیشه، در ادامه به تشریح چند نوع داده ای که تقریبا در همه زبانها امکان کار کردن بر روی اونها وجود دارد رو مختصرا بررسی میکنیم:
1- داده های عددی (دو زیر گروه عمده اعشاری و صحیح)، مثل 7، 2.1 (2 ممیز 1)، 14 و... اعداد تقریبا همان مفهومشان رو در دنیای طبیعی حفظ کرده اند، منتها رفتار، محدودیتها و امکانات زبانهای مختلف نسبت به انواع اعداد ممکن است متفاوت از یکدیگر باشند. مثلا ممکن است 5/2(پنج تقسیم بر دو) در زبانی مقدار 2.5 و در زبانی مقدار 2 رو برگرداند و اگر بخواهیم در این زبان حتماً 2.5 را بدست بیاریم باید تقسیم رو طور دیگری انجام دهیم.
نکته: در ادامه و در طول آموزشهای عملی بیشتر و دقیقتر با این مفاهیم کار خواهیم کرد.
2- داده های متنی (تک حرفی و چندحرفی) دو نوع داده متنی عمده در زبانهای برنامه نویسی وجود دارد، داده متنی تک حرفی مانند 'k' یا 'ع' یا '&' و... همانطور که میبینید اینها فقط معرف یک حرف هستند که اصطلاحاً به این نوع داده کاراکتر میگوییم و اکثراً با نشانه char میشناسیمشون. نوع دوم دادههای متنی، رشته ها یا متون چند حرفی هستند مثل "hassan" یا "به پدر مادر خود نیکی کنید". رشته ها رو به اسم string میشناسیم، زبانهای مختلف روشهای مختلفی برای تشخیص این نوع داده ها ارائه میدهند و حتی ممکن است رفتار و امکانات مختلفی برای هرکدوم ارائه دهند، حتی ممکن است زبانی تنها از متون چند حرفی پشتیبانی کند که در این صورت متون یک حرفی رو به چشم متنی که فقط یک حرف دارد میشناسد، یا حتی ممکن است زبانی به صورت مستقیم متون چند حرفی رو پشتیبانی نکند و متون چند حرفی رو به عنوان مجموعه ای از متنهای تک حرفی بشناسد. در زیر یک برنامه ساده رو به دو زبان مختلف مینویسیم، برنامه ای که قرار است دو کلمه رو به هم بچسبونه:
# python code:
name = "ali"
family='hasani'
name_family= name + family
خط اول این کد کامنت هست و کامپایل نمیشود، کامنت توضیحی هست که برنامه نویس برای خودش (یا دیگران) مینویسد، تا وقتی بعد از مدتی به کد نگاه میکند با کمک آن کامنتها سریعتر متوجه شود که آن قسمت از کد رو به چه منظور یا برای حل چه چیزی نوشته(با کامنتها در آینده بهتر آشنا میشیم).در ادامه دو متغیر ساختیم که در یکی اسم و در دیگری فامیلی رو قرار دادیم، در آخر هم اونها رو با کمک + به هم چسبوندیم و در متغیر جدیدی ریختیم. در ادامه همین کد رو در پی اچ پی مینویسیم تا متوجه شیم که ممکن است زبانهای مختلف برای یک کار از روشهای مختلفی استفاده کنن.
// php code:
$name = "ali"
$family='hasani'
$name_family= name.family
همانطور که میبینید، هم طرز کامنت نویسی، هم نحوه اسم گذاری متغیرها(در پی اچ پی اسم متغیر با $ شروع میشه) با هم فرق داره، اما نکتهای که در این بخش برای ما مهمه اینه که در پایتون برای چسبوندن دو رشته (مقدار متنی) به هم از + ولی در پی اچ پی از .(نقطه) استفاده میشه. و این قسمتی از تفاوت رفتاری است که زبانهای مختلف ممکن است نسبت به انواع دادهها باهم داشته باشند.
3- نوع دادهای منطقی(بولی یا boolean)، به طور ساده اینها درستی یا اشتباه بودن چیزی رو بیان میکنند و عموما با true یا false مقداردهی میشوند، فرض کنید قرار است نتیجه مقایسه دو عدد در متغیری ذخیره شود مثل تکه کد زیر در پایتون:
a= 12
b=54
a_is_great_or_b = a > b
خب در اینجا، نتیجه کاملاً معلومه، باید درون متغیر a_is_greater_or_b مقدار true(به معنی صحیح) قرار بگیرد. البته زبانهایی هستند که از این نوع دادهای پشتیبانی نمیکنن و بجای true و false از 0 و غیر صفر استفاده میکنن، صفر به معنی نادرست(false) و مقداری غیر از صفر به معنی درست (true).
4- دادههای شمارشی، مثل لیستها و آرایهها، اینها درواقع دنبالهای از داده های مختلف هستند مثل لیست زیر در پایتون:
thislist = ["apple", "banana", "cherry"]
در اینجا متغیری ساختیم که میتونه لیستی از اسامی میوهها رو در خود ذخیره کنه، همونطور که میبینید در اینجا اسم سه میوه که در بین دو تا "(دابل کوتیشن) محصور شده اند درون یک جفت [ و ] قرار گرفتهاند که با ,(ویرگول) از هم جدا شدهاند، در واقع متغیر thelist در بر گیرنده لیستی از متغیرهای رشتهای هست، که میتوان به هرکدام از اون متغیرها هم به صورت مستقل دسترسی داشت مثل:
print(thelist[0]) #به معنی، چاپ کن اولین عضو درون متغیر لیست رو
دادههای شمارشی در واقع مجموعهای از چند داده مستقل و مختلف هستند که تحت یک نوع ذخیره میشن، و چون میتوان تعداد دادههایی که در بر گرفتهاند رو شمرد و بدست آورد، همچنین میتوان با شماره قرارگیری هر زیرداده به اون زیر داده دسترسی داشت به همین دلایل به اونها دادههای شمارشی میگن، معروفترین داده شمارشی هم آرایه هست.
نکته: در مورد دادههای شمارشی، باید در یک یا چند مطلب مفصل و دقیقتر بحث شود. فقط باید در نظر گرفت درک این نوع دادهها خیلی مهم و درست درک کردن و یادگیری استفادشون میتونه در برنامهها خیلی مفید و حیاتی باشه.
قوانین و نکته های استفاده از انواع داده ها:
در ادامه این بخش با تعدادی از قوانین و محدودیتهایی که در اکثر زبانها در استفاده از داده ها و نوع بندی آنها رعایت میشه رو بیان میکنیم:
1- در اکثر زبانها، وقتی متغیری را تعریف میکنیم، نوع دادهای که میشه درون اون ذخیره کرد رو هم بیان میکنیم.
مثال زیر رو مطالعه کنید، دقت شود که توضیح کوتاه هر خط رو به صورت کامنت در همان خط مینویسم.
your_name="hasan" #متغیری ساختیم که میتونه مقدار رشته ای ذخیره کنه
your_age=24 #متغیری ساختیم که قرار هست اعداد صحیح رو ذخیره کنه
you_are_married=Fals #متغیری که نشانگر ازدواج کردنه، در اینجا یعنی ازدواج نکرده
your_average_points= 18.6 #متغیری که متوسط نمرات رو به صورت عدد اعشاری نگه میداره
همانطور که در بخش قبل گفته شد، در پایتون تعریف متغیر با اولین مقداردهی انجام میشه، و نوع داده ای که متغیر میتونه ذخیره کنه رو هم همون اولین مقدار تعیین میکنه. کدهای بالا گویا هستش.
2- معمولاً وقتی متغیری از یک نوع تعریف میشه، دیگه نمیشود نوع دادهای دیگری رو درون اون ریخت،(در واقع همون تغییر نوع متغیر) یعنی مثلاً اگر متغیری به صورت رشتهای تعریف شد دیگه نمیشه عدد درون اون ریخت. البته برخی زبانها اجازه میدن که نوع دادهای یک متغیر رو در آینده تغییر داد اما با این وجود تغییر نوع متغیر در آینده میتواند مشکلاتی بوجود آورد پس حداکثر دقت رو میکنیم که این کار رو نکنیم.
3- معمولاً میشه اعداد صحیح رو درون متغیرهای اعشاری ریخت، اما برعکسش ممکنه مشکلساز بشه، البته برخی زبانها مثل پایتون میتونن این قضیه رو اتوماتیک مدیریت کنن و مشکلی پیش نیاد، اما این عمل در زبانی مثل سی واقعاً ممکنه برنامه رو دچار مشکل کنه.
4- یک سری عملیات روی دادههای مختلف رو میشه در همه زبانها انجام داد، اما نحوه عملکرد هرکدام متفاوت است، مثلاً میشه اعداد رو باهم ضرب یا جمع، تقسیم یا منها و ...کرد، یا میتوان رشته ها رو به هم چسبوند یا به تعداد معینی تکرار کرد و یا قسمتی از متن درونشون رو برگردوند و ... پس بسته به زبانی که قرار هست یاد بگیریم باید بدونیم اون زبان قادر هست چه عملیاتی رو روی دادهها و به چه صورت انجام دهد.
5- هر نوع دادهای در زبانهای مختلف میتواند محدوده خاصی داشته باشد، مثلا نوع دادهای صحیح در پاسکال حد اکثر تا از منفی 32768 تا 32767 رو میتونه قبول کنه(در پاسکال برای اعداد بزرگتر نوع دادهای جدایی وجود داره) اما در پایتون محدوده این عدد به محدودیتهای پردازنده وابسته هست، ممکن هست در زبانی رشتههای معمولی حداکثر 256 حرف رو قبول کنن و در زبانی 32767 تا حرف رو قبول کنن. پس محدودیتهای زبان مورد استفادهمون در این زمینهها رو هم باید در نظر گرفت.
6- نوع دادهای شمارشی در اکثر زبانها آرایه هست، اما در پایتون آرایه به اونصورتی که در زبانهای دیگر مطرح هست وجود نداره، اما بجاش در پایتون لیست وجود دارد که میتواند همه امکانات اصلی آرایهها رو هم داشته باشد، برخی زبانها هم لیستها رو دارند و هم آرایهها رو.
نکته: در اینجا فقط انواع دادهای اصلی رو شناختیم، یک سری نوع هم داریم که از ترکیب چند داده مختلف به دست میایند که به اونها دادههای ترکیبی میگوییم، دادههای شمارشی (آرایه، لیست و ...) یک نمونه از دادههای ترکیبی هستند، ساختارها (structure) و کلاسها(class) هم نمونههایی از انواع ترکیبی هستند.
نکته: در آینده و با مثالهای بیشتر، انواع داده های مختلف را بیشتر و دقیقتر خواهیم شناخت.
خلاصه این بخش
در این بخش با انواع دادهای اصلی در برنامهنویسی آشنا شدیم، خوندیم که محدودیتها و امکاناتی برای هرکدام از دادهها وجود داره که این موضوع به زبان مورد استفاده هم بسیار وابسته است.
مطلبی دیگر از این انتشارات
انواع تستها در برنامه نویسی و توسعه نرم افزار
مطلبی دیگر از این انتشارات
آموزش tkinter - اولین برنامه جمع دو عدد!
مطلبی دیگر از این انتشارات
جنبههای معماری نرم افزار