پیامها
پیامها ساختارهای اساسی در اسمالتاک هستند. حتی دساورات کنترلی نیز به صورت ارسال پیام پیاده میگردند. مثال پایین پیام factorial را به عدد 42 میفرستد.
در این حالت 42 گیرنده پیام است در حالی که factorial انتخابکننده میباشد. گیرنده پیام با بازگرداندن مقداری (در اینجا احتمالاً فاکتوریل عدد ۴۲) پاسخ میدهد. علاوه بر این مقدار بازگردانده شده را میتوان به یک متغی نسبت داد:
aRatherBigNumber := 42 factorial
factorial پیامی است که به آن عموماً پیام یگانه گویند چرا که فقط یک شی و آن هم دریافتکننده در آن نقش دارد. پیامها میتوانند چندین شی را به عنوان آرگومان خود حمل کنند:
در این عبارت دو شی نقش داشتهاند: 2 به عنوان گیرنده و 4 به عنوان آرگومان. نتیجه پیام یا در اصطلاح اسمالتاک پاسخ پیام 16 است. یک پیام میتواند آرگومانهای بیشتری هم داشته باشد.
'hello world' indexOf: $o startingAt: 6
مثال بالا اندیس o در رشته داده شده با شروع از اندیس ۶ را بازمیگرداند. انتخابکننده این پیام :indexOf:startingAt که از دو کلمه کلیدی یا قسمت تشکیل شده است.
چنین کلمات کلیدی درهمتنیده خوانایی کد را بالا برده و آرگومانها بهوسیله کلمات کلیدی پیش از خود توصیف میگردند. به عنوان مثال یک عبارت برای ساخت یک مستطیل در ++C یا جاوا به شکل زیر است:
در این عبارت مشخص نیس ت کدام آرگومان طول است یا عرض و شما برای فهمیدن این نکته باید به راهنمای زبان مراجعه نمایید اما همین عبارت در اسمالتاک بدون هیچگونه ابهام نوشته میشود به شکل زیر:
Rectangle width: 100 height: 200
گیرنده در این حالت Rectangle یک کلاس است و در پاسخ یک نمونه از این کلاس با عرض و طول خواسته شده تولید میگردد.
در نهایت بیشتر کاراکترهای غیرالفبایی به عنوان پیام دودویی بکار میرود. این به برنامهنویس اجازه میدهد تا عملگرهای ریاضی را به شکل سنتی بنویسد:
که پیام + را به گیرنده 3 به همراه آرگومان 4 میفرستد (که پاسخ برابر با ۷) است. به طور مشابه:
پیام < را به 3 به همراه آرگومان 4 را میفرستد (پاسخ false است).
توجه کنید که در اسمالتاک-۸۰ خود این عملگرها پیاده نشدهاند. خروجی تنها بستگی به نحوه پاسخدهی گیرنده (در این جا نمونه Number) در برابر پیام < و + پاسخ میدهد.
اثر جانبی این مکانیزم گرانبارسازی عملگر است. یک پیام < را بقیه اشیا هم میتوانند بفهمند که این امکان را میدهد تا از عبارت a>b برای مقایسه آنها بکار میرود.