به محض بیرون آمدن از حالت سکون،
اِتیک پذیرای تیرهبختِ سه چیز شوکآور است.
نخست: یک سلول زندان.
دوم: فراموشی کامل.
و سوم: یک غریبهی اسرارآمیزِ گیرافتاده
که از پنجرهاش خود را
به زحمت در میان نردهها میچپاند.
نام او هِج است، و او آمده تا در
نجات دادن جهان به اِتیک کمک کند.
اما نخست آنها باید از زندان خارج شوند.
هِج دستش را به قفلبازکن تبدیل میکند و
چالش پیش رو را ترسیم میکند.
هر قفل در زندان
به شیوهی نامعمول یکسانی کار میکند.
داخل سوراخ کلید یک صفحهی مدرج قرمز است
که میتواند به هر یک از صد مکانی بچرخد،
که از یک تا صد شماره گذاری شدهاند.
کلید یک سلول فرضی، صفحه مدرج
را تا جای درست میچرخاند،
که، هنگامی که در آنجا توقف کرد،
آن را سبز کرده و قفل در را باز میکند.
دزدیدن کلیدها از یک نگهبان غیرممکن است،
اما هِج فکر بهتری دارد.
هِج میتواند فرمانهای اِتیک را اجرا کند.
اگر اِتیک به او بگوید که
پنج قدم به سمت جلو حرکت کن،
به سمت راست بچرخ، سپس پنج قدم دیگر بردار،
این دقیقاً کاری است که او انجام خواهد داد.
گرچه هِج نیازمند دستورالعملهای مشخص است.
اگر اِتیک بگوید "قفل را بردار" یا
"تمامی ترکیبات را امتحان کن"
خیلی گنگ خواهد بود، اما "صفحهی مدرج را
پنج مکان به سمت جلو بچرخان" کار خواهد کرد.
به محض خروج از سلول، آنها
تنها چند لحظه برای شکستن قفل وقت دارند
همچنین برای در خارجی زندان،
پیش از این که نگهبانان آنها را بگیرند.
بنابراین چه دستوراتی به هِج اجازه خواهد
داد تا به صورت بهینه هر دری را باز کند؟
اکنون درنگی کنید تا خودتان آن را دریابید.
پیش از این که ما راهحل را توضیح دهیم،
یک راهنما اینجاست.
مفهوم کلیدی برنامهنویسی که به
باز شدن قفل در معروف به حلقه کمک میکند.
که میتواند یک یا چند دستور باشد که هِج
مکرراً انجام میدهد ــ یا تکرار میکند ــ
به یک تعداد دفعات مشخص،
مانند "صد بار بالا و پایین بپر."
یا دستورالعملی که هِج تا پیش از زمانی که
به یک شرط برخورد کند، تکرار خواهد کرد،
مانند "تا ساعت هفت،
به بالا و پایین پریدن ادامه بده."
اکنون مکث کنید تا خودتان دریابید.
اولین چیزی که واضح است این است
که شما باید راهی برای هِج پیدا کنید
که تمامی ترکیبها را تا زمانی که
یکیشان کار کند امتحان کند.
چیزی که اندکی بیشتر تلاش میبرد، این
است که شما دقیقاٌ چطور این کار را میکنید.
یک راهحل میتواند راهنمایی هِج برای
امتحان کردن همه ترکیبها به ترتیب باشد.
یک را امتحان کن و چراغ را بررسی کن.
اگر سبز شد، در را باز کن،
و در غیر اینصورت، دو را امتحان کن.
اگر کار نکرد ۳ را امتحان کن.
همهاش تا شماره ی ۱۰۰.
اما نمایش تمام آن خستهکننده خواهد بود.
چرا بیش از صد خط کد بنویسی،
وقتی که میتوانی همان کار را
فقط با سه تا انجام دهی؟
اینجاست که سر و کلهی حلقه پیدا میشود.
تعداد اندکی راه برای انجامش وجود دارد.
قفل دارای صد ناحیه است،
پس اِتیک میگوید "رنگ صفحهکلید را چک کن،
سپس شماره را یک بار به سمت جلو بچرخان"
برای صد بار تکرار.
آنجایی که شمارهگیر سبز شد یادتان باشد،
از هِج بخواهید به همان عدد باز گرداند.
یک حلقه همانند این، که تعداد باری که
تکرار میشود را مشخص میکنی،
یک حلقهی "for" نامیده میشود.
اما یک حلقهی حتی کارآمدتر
هِج را وامیدارد تا صفحهی شمارهگیر را
یکی یکی بچرخاند تا زمانی که سبز شود
و به محض این که این اتفاق افتاد، او را
وادار به توقف و باز کردن در میکند.
در آن صورت، اگر در
روی شمارهی یک گشوده شود،
او به چرخیدن بین باقی شمارهها
نیاز نخواهد داشت.
این حلقهی "until" است،
زیرا دربرگیرندهی کاری است
تا زمانی که یک شرط برقرار شود.
یک روش مشابهِ جایگزین میتواند چرخاندن
صفحهی شمارهگیر مادامی که هنوز قرمز است،
سپس توقف، باشد.
این حلقهی "while" نامیده میشود.
به ماجراجویی بازگردیم.
هِج در میان ترکیبها دور میزند،
و سلول روی ۴۱ باز میشود.
اِتیک و هِج تا زمان مناسب تعویض نگهبانها
صبر میکنند
و به سرعت فرار میکنند.
به زودی، اِتیک با یک انتخاب مواجه میشود:
درون یک کریستال رازآلود پنهان شود،
یا تلاش کند تا در خروجی را شکاف دهد و
از آن بگریزد.
اِتیک انتخاب میکند تا بدود.
دومین در زمان بیشتری برای هِج طول میکشد،
و او را ملزم به چرخاندن تا ۹۳ میکند.
اما او آن را باز میکند
و فرصت این را به دست میآورد تا
علت این که اِتیک را فراری داده، توضیح دهد.
جهان در پریشانی است:
رباتها قدرت را به دست گرفتهاند،
و تنها اِتیک میتواند چیزها را مرتب کند.
تا چنین کاری انجام دهد،
لازم است تا سه وسیله
مصنوع قدرتمند را جمعآوری کنند
که در کل سرزمین برای اهداف
نابکارانه مورد استفاده قرار گرفتهاند.
تنها در آن زمان اِتیک بتواند
به ماشین دنیا - کریستال عظیم -برگردد
تا چیزها را درست کند.
اِتیک شاید از زندان گریخته باشد...
اما او خود را به چه چیزی وارد کرده است؟