رفتن به محتوای اصلی

نوع داده در زبان‌های مختلف

 

بنابراین الآن ما فهمیدیم که ما یک نوع داده داریم که در پایه بسیار مهم است. در فراهم کردن اصل هوش غیر قوی، کامپیوتر این‌ها را حتماً نیاز دارد و همچنین اگر هوش قوی را به نحو پایه‌محور فرض گرفتیم، به آن نیاز دارد. البته یک سؤال امتحانی که نوعاً مطرح است و قشنگ است، این است: الآن این نوع داده بولین که گفتم یا درست است یا غلط است، نیاز به چند بیت دارد؟ مثلاً در عدد گفتیم که اگر بیشتر یک مقداری باشد، نیاز به دو-سه بیت دارد. این‌که بخواهیم بگوییم چیزی درست است یا غلط است، به چند بیت نیاز دارد؟ یکی. اگر صفر است غلط است و اگر یک است درست است و تمام. اما وقتی شما به فضای کامپیوتر و پردازش می‌روید، همین نوع داده‌ای که بیت است - و به بیشتر هم نیازی نداریم- صفر یا یک است. خیلی جالب است. در این زبان‌ها اگر ظرفیتش را نگاه کنید، می‌بینید اقلش هشت بیت جا گرفته است. نوع داده بولین در زبان‌هایی مثل C که زبانی سطح پایین است، اقلش هشت است. بعضی از زبان‌های دیگر، چهار بایت است. اما در زبان‌هایی مثل پایتون که شیءگرای تام است، تا حدود بیست و چهار بایت می‌شود! شیءگرائی آن را الآن عرض می‌کنم.

این‌ها مراحلی است که باید ببینیم چطور طی شده تا بعد بگوییم در فضای پایه یک آثار و خواصی فراهم شود. یک بیت می‌خواهید تا بگویید درست و غلط، درحالی‌که الآن در زبان پایتون نیاز است در دستگاه کامپیوتر شما بیست و چهار بایت جا بگیرد که هر بایتی هم هشت بیت است؛ یعنی فضای بسیار زیادی برای یک بیت لازم است. چرا؟ دو-سه وجه دارد. وجه ابتدائی آن‌ -که به هیچ وجه بولین به شکل یک بیت نداریم- مربوط به کل کامپیوترها می‌شود که همان چیزی است که هفته قبل اشاره کردم؛ گفتم وقتی پردازش‌گر می‌خواهد در رم (RAM) آدرس بدهد، آن واحدی که می‌تواند به آن آدرس بدهد، بایت است. در رم، بیت داریم، اما بیتی که بتوان به آن آدرس داد، نداریم. کوچک‌ترین واحد اطلاعاتی قابل آدرس‌دهی، بایت - یعنی هشت بیت - است. خب ما به‌عنوان یک عنصر منطقی، می‌خواهیم بگوییم «درست»، می‌خواهیم بگوییم «غلط»، اما می‌خواهیم به عملگری که درست و غلط می‌گوید، آدرس بدهیم و وقتی می‌خواهیم آدرس بدهیم، چاره‌ای نیست از اینکه هشت بیت را بگیرد. ولو ما تنها به یکی از آن‌ها نیاز داریم و بقیه آن را صفر می‌زنیم و فقط به اولین عددش کار داریم که یا صفر است یا یک است و بقیه اش لغو است، ولی خب چه کنیم؛ چرا که آدرس‌دهی است.

اگر یادتان باشد زمانی‌که این هاردهای ترابایتی درآمد، مشکل کار این بود که نرم‌افزاری که به حجم یک ترابایت آدرس‌دهی کند، نداشتند. اول باید برنامه‌ای بدهند. چرا؟ چون تعداد آدرس‌دهی مهم بود و نمی‌توانست آدرس‌دهی کند. خود هارد ظرفیتش را داشت، اما نرم‌افزاری که آدرس‌دهی کند را نداشت. مثلاً در همین رم‌ها ابتدا که شروع شد، با یک روال بیست‌بیتی آدرس می‌داد. در بیست بیت چند تا می‌تواند آدرس بدهد؟ فوری می‌گویید دو به توان بیست. اگر حافظه، وسیع‌تر بود، نمی‌توانست آدرس بدهد. چرا؟ چون شما باید بتوانید به وسیله این عدد، آدرس بدهید. الآن کدپستی را ببینید. اگر منزل‌های شما از محدوده آن بیشتر شود، دیگر نمی‌توانید آدرس بدهید و کم می‌آورید.

در این فضا، یک بیت درست و غلط، برای آدرس‌دهی به‌صورت اجبار، حداقل یک بایت شده. زبان‌هایی که سر و کارشان با این رجیسترها است …؛ البته سر و کار خود سی‌پی‌یو هم با رجیستر است و لذا نوعاً در خود سی‌پی‌یو بدون زبان‌های سطح بالا، سر و کارتان در نوع داده بولین با چهار بایت یا هشت بایت است. چون سی‌پی‌یو، آن عددها را مرتب در هشت بایت - به‌عنوان ثبّات یا رجیستر - ذخیره می‌کند که اگر نباشد، اصلاً نمی‌تواند سریع کارش را انجام بدهد. ثبّات‌ها مثل کاسه‌های آشپزی می‌ماند. کسی که می‌خواهد آشپزی کند، یک کاسه آب کنار دستش می‌گذارد تا دوباره مجبور نباشد که مرتباً برود و بیاورد؛ اگر بخواهد ریز ریز بیاورد، طول می‌کشد. این‌ها هم همین‌طور است؛ اطلاعات را در ظرف‌های کنار دست خودش ذخیره می‌کند. این هم برای این‌که بتواند ذخیره کند، گاهی مجبور است یک بیت درست و غلط را در یک رجیستری بگذارد که چهار بایت یا هشت بایت است. این‌ها کارهایی است که انجام می‌دهد.

زبان‌هایی که شیءگرا هستند، حافظه بیشتری را می‌گیرند. وقتی به‌عنوان یک داده بولین، می‌گویید درست و غلط، زبان شیءگرا سر و کارش با یک شیء است، نه با یک کاراکتر و نه با یک بایت که بایت یک کاراکتر است. پایه او اصلاً با کم‌تر از شیء سر و کار ندارد؛ مجبور است با شیء سر و کار داشته باشد. خب این نوع داده بولین، بیشتر از یک بیت نیست، اما چون سر و کار او با شیء است و هر شیء، حداقل بیست و چهار بایت است، مجبور است او یک بیت درست و غلط را در بیست و چهار بایت بگذارد، ولی مفادش همین درست و غلط است.