مسیرها
/
Ruby
Ruby
/
تمرین‌ها
/
بندر پالرمو
بندر پالرمو

بندر پالرمو

تمرین یادگیری

مقدمه

نمادها شناسه‌هایی اسم‌دار هستند که می‌توان با آن‌ها به یک مقدار اشاره کرد. نمادها با نوشتن یک نماد به‌صورت مستقیم ساخته می‌شوند، یعنی با افزودن کاراکتر : به ابتدای یک اسم، مثلاً :foo. همچنین می‌توان آن‌ها را داخل گیومه نوشت، مثلاً :"foo"، که به این ترتیب، مثلاً، استفاده از فاصله در اسم را ممکن می‌کند.

:foo # => :foo
:"foo boo" # => :"foo boo"

نمادها در جاهای زیادی از زبان به کار می‌روند، از جمله به عنوان کلید در هش‌ها، و برای نمایش اسم متدها و اسم متغیرها.

شناسه

چیزی که نمادها را از رشته‌ها متمایز می‌کند این است که آن‌ها شناسه‌اند و نماینده‌ی داده یا متن نیستند. یعنی دو نماد با اسم یکسان همیشه یک شیء یکسان‌اند.

"foo".object_id # => 60
"foo".object_id # => 80
:foo.object_id # => 1086748
:foo.object_id # => 1086748

تغییر نمادها

نمادها تغییرناپذیرند، یعنی نمی‌توان آن‌ها را تغییر داد. پس وقتی یک نماد را «تغییر می‌دهید»، در واقع دارید نماد تازه‌ای می‌سازید. چند متد وجود دارد که می‌توان با آن‌ها نمادها را دستکاری کرد؛ همه‌ی آن‌ها نمادهای تازه‌ای برمی‌گردانند. همه‌ی متدها را می‌توانید در رابط برنامه‌نویسی Symbol پیدا کنید.

:foo.upcase # => :FOO

:foo.object_id # => 1086748
:foo.upcase.object_id # => 60

مزیت تغییرناپذیر بودن نمادها این است که از نظر حافظه از رشته‌ها کارآمدترند، و به‌عنوان شناسه هم استفاده‌ی ایمن‌تری دارند.

تبدیل

می‌توان نمادها را به رشته تبدیل کرد و برعکس. این کار وقتی مفید است که بخواهید نمادی را تغییر دهید، یا بخواهید از یک نماد به‌عنوان رشته استفاده کنید. برای تبدیل یک رشته به نماد می‌توانید از متد String#to_sym استفاده کنید و برای کار برعکس، از متد Symbol#to_s. چون نمادها متدهای محدودی دارند، اگر به نماد تازه‌ای نیاز داشته باشید، مفید است که نماد را به رشته تبدیل کنید تا متدهای رشته را روی آن به کار ببرید.

:foo.to_s # => "foo"
"foo".to_sym # => :foo

دستورالعمل‌ها

بندر پالرمو یک لنگرگاه پررفتوآمد است که کشتی‌های زیادی به آن وارد و از آن خارج می‌شوند. مدت‌هاست که این بندر برای پیگیری کشتی‌هایی که در حال حاضر در لنگرگاه هستند، یک سامانه‌ی دستی دارد. این سامانه بسیار خطاپذیر است و رئیس بندر تصمیم گرفته آن را با یک سامانه‌ی رایانه‌ای جایگزین کند.

رئیس بندر شما را استخدام کرده است تا سامانه‌ی جدید را پیاده‌سازی کنید. این سامانه باید شناسه‌ها را برای کشتی‌ها و همچنین برای مقصدها مدیریت کند.

1. شناسه‌ی بندر را بسازید

اولین کاری که باید انجام دهید این است که شناسه‌ی بندر پالرمو را بسازید. شناسه از چهار حرف اول اسم بندر تشکیل می‌شود، با حروف بزرگ.

ثابت Port::IDENTIFIER را طوری تعریف کنید که یک نماد با مقدار :PALE باشد.

Port::IDENTIFIER 
# => :PALE

2. شناسه‌ی بندرهای دیگر را به دست آورید

برنامه باید بندرهای دیگر را هم مدیریت کند، بنابراین باید برای آن‌ها هم شناسه بسازید. بندر می‌خواهد این سامانه خودکار باشد و چون بندرها از قراردادهای نام‌گذاری متفاوتی استفاده می‌کنند، شناسه‌ها باید از اسم بندر تولید شوند. شناسه از چهار حرف اول اسم بندر تشکیل می‌شود، با حروف بزرگ.

متد Port.get_identifier را طوری تعریف کنید که یک رشته به عنوان آرگومان بگیرد و شناسه‌ی آن بندر را به صورت یک نماد برگرداند.

Port.get_identifier("Hamburg") 
# => :HAMB

3. تعیین کنید که یک کشتی باید در کدام ترمینال پهلو بگیرد

بندر دو ترمینال دارد و سامانه باید تعیین کند که یک کشتی باید در کدام ترمینال پهلو بگیرد. ترمینال بر اساس شناسه‌ی کشتی مشخص می‌شود.

شناسه از ۲ بخش ساخته می‌شود؛ بخش اول از ۳ حرف بزرگ تشکیل شده است که می‌گوید کشتی چه باری حمل می‌کند و سپس ۳ عدد که شناسه‌ی یکتای کشتی است.

اگر کشتی بار OIL یا GAS را حمل کند، باید در ترمینال A پهلو بگیرد. در غیر این صورت، کشتی باید در ترمینال B پهلو بگیرد.

متد Port.get_terminal را طوری تعریف کنید که یک نماد به عنوان آرگومان بگیرد که همان شناسه‌ی کشتی است. متد باید ترمینال را به صورت یک نماد برگرداند.

Port.get_terminal(:OIL123)
# => :A
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
Ruby Exercism

آماده‌اید بندر پالرمو را شروع کنید؟

در Exercism ثبت‌نام کنید تا Ruby را همراه با 21 مفهوم121 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.