انسان یک گونه نقاد ، هنرمند و هوشمند است ! به همین خاطر است که پرسشگری میکند!
تجربه من از برنامه نویسی روز دوم.
توجه این مقاله رو حتما باید با ویس بالا گوش بدید و بخونید تا درک کنید که در مورد چی حرف میزنم مرسی❤
گلوم درد میکنه و از بابت این موضوع عذر میخوام.
اسم این پادکست رو گذاشتم GBGEEK اگر دوست داشتید حتما بزارید که بدونم که حستون نسبت به مقاله و چیزایی که گفته شد چی هست.
هر چند که روز دوم نیست ، ولی آره.
مدتی هست که دارم سی پلاس پلاس یاد میگیرم اگر توی این مقاله دیدید نوشتم cpp منظورم سی پلاس پلاسه و اگر نوشتم ppp اسم کتابی هست که دارم مطالعه اش میکنم. که مخفف : programming principles and practice using c plus plus هست که نویسندش، بیارنه استراوستروپ هستش. من چاپ دومش رو میخونم ولی خب سومیشم هم دو سه هفته پیش اومد بیرون.
توی این مقاله میخوام براتون از یه چیز جذاب بگم.
یه مقدمه کوچولو.
خب من فصل سوم کتاب رو تموم کردم توی این فصل در مورد آبجکت ها ، تایپ سیفتی، و مباحث جالبد دیگه گفت مثلا این که value چیه. این خیلی برام عجیب و جذاب بود که به این فکر کنم که value یا همون مقدار چیه؟
جواب کتاب به این سوال جذاب تر هم بود. به نظرتون حالا واقعا value چیه و چه تعریفی داره؟
طبق گفته ی کتاب value یعنی مجموعه ای از بیت ها * که درون مموری با توجه به نوع و جنس اطلاعاتی که دارند تفسیر میشند. مثلا عدد 120 در مموری به صورت این بیت ها در میاد :
integer : 120
binary : 00000000 00000000 00000000 01111000
خب این یعنی چی؟
بزارید قبلش بایت و بیت رو براتون توضیح بدم که چی هستند ؟ به هر مجموعه 8 تایی از 0 ها و 1 ها میگن بایت. و به هرکدوم از این 0 ها و یا 1 ها میگن بیت. مثلا الان توی کد باینری بالا 4 تا بایت داریم و 32 بیت.
این کد باینری اگر در مموری در بخشی از حافظه ذخیره بشه که فقط دیتایی عددی میپذیره به صورت عدد تفسیر میشه.
و عدد 120 رو به ما میده ولی همین کد باینری اگر در بخشی از حافظه ذخیره بشه که دیتای کارکتر میپذیره به صورت کارکتر یا حرف تفسیر میشه و حرف x رو به ما نشون میده .
بعد از درک چنین موضوعاتی به بحث type safety رسیدم. این بحث هم به نظرم جالب بود و محتوای این پست دقیقا از همین قسمت بود که پیدا شد. یه قضیه تاریخی و مفهومی جالب در دنیای کامپیوتر رو پیدا کردم. اما قبل از اون بیاید تا ازتون سوالی بپرسم.
سوال اینه : وقتی که روی کیبوردمون دکمه enter رو میزنیم و خط جدیدی تعریف میشه، insertion point به پایین میره؟ یا صفحه به بالا؟ بزارید جور دیگه ای سوالم رو بپرسم حتما تا الان روی یک صفحه شروع به نوشتن کردید وقتی که داریم مینویسیم یک خط راست که چشمک میزنه وجود داره که به این خط راست به طور عمومی میگن text cursor یا the cursor ولی در اصل و علمیش insertion point هست حالا وقتی دکمه enter رو میزنیم این علامت میره پایین و ما میتونیم توی خط بعدی بنویسیم حالا سوال من اینه که آیا واقعا این علامت پایین میره یا صفحه بالا میره؟
یکم فکر کنید....
میتونید یک صفحه notepad رو باز کنید چندین بار دکمه enter رو بزنید و به این فکر کنید که آیا صفحه ی سفید حرکت میکنه یا insertion point شما؟
خب حالا که فکر کردید، بزارید بریم سر اصل مطلب ...
در واقع وقتی داشتم به بحث type safety رسیدگی میکردم تا مفهومش رو بیشتر درک کنم به یه رفتار عجیب برخوردم ، اونم هنگام تبدیل عدد 13 به کارکتر ASCII متناظرش ، هر کاری کردم بفهمم که این کارکتر دقیقا چیکار میکنه نتونستم ازش سر در بیارم پس توضیحات مربوط به این کارکتر رو سرچ کردم و مطالعه اش کردم.
به این کارکتر که به صورت Regualr expression در بسیاری از زبان های برنامه نویسی هم استفاده میشه و به شکل r\ نوشته میشه میگن : Carriage Return یا به اختصار CR.
این CR قصه ی ما به نوعی از خویشاوند های کارکتر Line Feed یا همون کارکتر New Line هستش که در Regular Expression به صورت n\ نوشته میشه. که به اختصار LF هم بهش میگن.
حالا چرا خویشاوندش؟
چون به نوعی CR به حرکت دادن insertion point کمک میکنه . تا بتونیم به نوشتنمون در خطوط بعدی ادامه بدیم که حالا کمی جلو تر دقیقا بهتون میگم که چیکار میکنه.
خب فرآیند تایپ کردن و استفاده از کیبورد و خلاصه اینجور چیز ها برمیگرده به ماشین های تایپ. در ماشین های تایپ قدیمی، وقتی که insertion point به آخر خط میرسیده . اگر به خط جدید میرفتید و شروع به نوشتن میکردید،،،، کلمه ای که مینوشتید در آخر خط جدیدی که رفته بودید نوشته میشده. چون که وقتی که به خط بعدی میرفتید، اینزرشن پوینتِ شما، ثابت میمونده و از همونجایی که بوده شروع به نوشتن میکرده؛ منتها فقط فرقش این بوده که توی خط جدید بودید.
به عبارتی فکر کنید که دارید با یه خودکار روی یه کاغذ مینویسید، اگر وقتی که به آخر خط میرسید خودکار رو در همون نقطه نگه دارید و فقط کاغذ رو به سمت بالا هدایت کنید تا به خط بعدی برید. اینجوری میشه که وقتی از نو شروع به نوشتن میکنید. کلمات شما از همون پوزیشنی که در خط قبل بودید نوشته میشه به این شکل :
فکر میکنم با مثال بالا درک کرده باشید که منظورم چیه. و همین قضیه نشون میده که وقتی کلید enter رو میزنیم؛ صفحه به سمت بالا حرکت میکنه.
و نه insertion point به سمت پایین گرفتید؟
حالا برای حل این مشکل کارکتر 13 یا همون CR ساخته میشه. CR میاد insertion point رو قبل از رفتن به خط بعدی به اول خط میاره و اینجوری دیگه مشکل بالا رو نخواهیم داشت.
حالا جالبه که توی پرینتر های مدرن دیگه این مشکل وجود نداره به همین خاطر سیستم عامل های مک که از ورژن 10 بالاتر هستند. در واقع دیگه از CR برای رفتن و به عبارتی تعریف خط جدید استفاده نمیکنند. و مثل دیگر سیستم های یونیکسی فقط Line Feed استفاده میکنند که همون n\ هستش.
اما این قضیه جایی برام جالب شد که توی نوت پد این رو دیدم :
در این عکس قسمتی که نوشته windows CRLF داره در مورد همین موضوع میگه که توی ویندوز برای رفتن به خط بعدی از CR + LF استفاده میشه و با توجه به این که هر کارکتر یک بایت از مموری رو اشغال میکنه.
پس به ازای هر خط جدید دو بایت به فایلتون در ویندوز اضاف میشه در حالی که توی لینوکس و مک اینجوری نیست و فقط یک بایت به ازای هر خط جدید به فایل اضاف میشه.
اما این یه مزیت هم داره، مزیتش اینه که اگر روزی احیانن بخواید از پرینتر های قدیمی استفاده کنید. تنها سیستمی که به احتمال خیلی زیاد مشکلی رو براتون به ارمغان نمیاره همین سیستم استفاده از این دو کارکتره.
نمیدونم چقدر این دانستنی به دردمون میخوره ولی چیزی بود که حین تمرین تایپ سیفتی بهش رسیدم گفتم شاید باحال باشه و شما هم بخواید بدونید من فَرِهان هستم و مرسی که این مطلب رو خوندید.
من رو در شبکه های مجازی میتونید فالو کنید :
اینستاگرام : atfarhanwd
تلگرام : atfarhanwd
مطلبی دیگر از این انتشارات
تفاوت اینترفیس و Abstract در برنامه نویسی
مطلبی دیگر از این انتشارات
کست باکس دانلودر شیک و مجلسی!
مطلبی دیگر از این انتشارات
مجبور شدم در آخر برم سراغ kivy برای ساخت برنامه پایتون برای اندروید!