درس ۱۴ از ۲۵ · داده‌ها و گونه‌ها

ساختارها

ساختار چند داده‌ی مرتبط را زیر یک نام جمع می‌کند و روال‌هایی (روش‌ها) دارد که روی همان داده کار می‌کنند.

تعریف ساختار

هر فیلد نام، گونه و می‌تواند مقدار پیش‌فرض داشته باشد. فیلدها و روش‌ها به‌طور پیش‌فرض خصوصی‌اند؛ همگانی آن‌ها را بیرون ساختار در دسترس می‌کند. درون روش‌ها با این به خود ساختار اشاره می‌کنید.

structs.salam
ساختار مستطیل:
    همگانی پهنا: صحیح = ۱
    همگانی بلندی: صحیح = ۱
    همگانی روال مساحت(): صحیح:
        برگشت این.پهنا * این.بلندی
    پایان
پایان

روال ریشه:
    زمین := مستطیل { پهنا = ۱۲, بلندی = ۸ }
    سرچاپ "مساحت زمین:", زمین.مساحت()
پایان
خروجیمساحت زمین: 96

ساختن و چاپ

در ساختن نمونه، هر فیلدی که ننویسید مقدار پیش‌فرضش را می‌گیرد. ساختارها را می‌شود مستقیم چاپ کرد:

struct-print.salam
ساختار نقطه:
    همگانی ایکس: صحیح = ۰
    همگانی وای: صحیح = ۰
پایان

روال ریشه:
    ن := نقطه { ایکس = ۳، وای = ۴ }
    سرچاپ ن
    سرچاپ نقطه {}
پایان
خروجینقطه {ایکس = 3, وای = 4} نقطه {ایکس = 0, وای = 0}

روش ناپایا

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

struct-mut.salam
ساختار شمارنده:
    مقدار: صحیح = ۰
    همگانی روال خواندن(): صحیح:
        برگشت این.مقدار
    پایان
    همگانی ناپایا روال یکی‌بیشتر():
        این.مقدار += ۱
    پایان
پایان

روال ریشه:
    ناپایا ش := شمارنده {}
    ش.یکی‌بیشتر()
    ش.یکی‌بیشتر()
    سرچاپ ش.خواندن()
پایان
خروجی2

عضو ایستا

ایستا روال و پایا درون ساختار به خودِ گونه تعلق دارند، نه به یک نمونه؛ با نام ساختار صدایشان بزنید. جای مناسبی برای ساختن نمونه‌های آماده است.

struct-static.salam
ساختار رنگ:
    همگانی سرخ: صحیح = ۰
    همگانی سبز: صحیح = ۰
    همگانی آبی: صحیح = ۰
    همگانی پایا بیشینه := ۲۵۵
    همگانی ایستا روال خاکستری(مقدار: صحیح): رنگ:
        برگشت رنگ { سرخ = مقدار، سبز = مقدار، آبی = مقدار }
    پایان
پایان

روال ریشه:
    سفید := رنگ.خاکستری(رنگ.بیشینه)
    سرچاپ سفید
پایان
خروجیرنگ {سرخ = 255, سبز = 255, آبی = 255}

ترکیب با شامل

شامل یک ساختار را درون ساختار دیگر می‌گذارد و فیلدها و روش‌های همگانی‌اش را مستقیم در دسترس می‌کند؛ ترکیب به‌جای ارث‌بری.

struct-embed.salam
ساختار جانور:
    همگانی نام: رشته = ""
    همگانی روال معرفی(): رشته:
        برگشت "من " + این.نام + " هستم"
    پایان
پایان

ساختار سگ:
    همگانی شامل جانور
    همگانی نژاد: رشته = ""
پایان

روال ریشه:
    س := سگ { نام = "رکس"، نژاد = "شکاری" }
    سرچاپ س.معرفی()
    سرچاپ س.نام، س.نژاد
پایان
خروجیمن رکس هستم رکس شکاری