Smalltalk

**Smalltalk**֊ը օբյեկտներին-կողմնորոշված, դինամիկ տիպիզացվող, ռեֆլեկտիվ ծրագրավորման լեզու է։ Այն 1970-ականների նախագծվել և իրականացվել է Xerox PARC կազմակերպությունում Ալան Քեյի (Alan Kay) կողմից (մասնակցությամբ Դեն Ինգալսի, Ադել Գոլդբերգի և ուրիշների), որպես ուսուցողական ծրագրավորման լեզու։

Լեզուն առաջին անգամ հրապարակվել է Smalltalk-80 անվանումով։ Հետագայում Smalltalk-ին նման լեզուները շարունակեցին ակտիվ զարգանալ և իրենց շուրջը հավաքեցին հավատարիմ օգտագործողների խմբեր։ ANSI Smalltalk տարբերակը հաստատվեց 1983 թվականին, և այժմ հանդիսանում է Smalltalk լեզվի ստանդարտ։

## Շարահյուսությունը
**Smalltalk-80** լեզվի շարահյուսություն մինիմալիստական է, հիմնված մի քանի հայտարարությունների ու ծառայողական բառերի վրա։ Փաստացի Smalltalk լեզվում կան միայն վեց ծառայողական բառեր. `true`, `false`, `nil`, `self`, `super` և `thisContext`։ Իրականում այս բառերը կոչվում են *փսևդո-փոփոխականներ*. այնպիսի իդենտիֆիկատարներ, որոնք ենթարկվում են փոփոխականների իդենտիֆիկատորների կանոններին, բայց չեն կարող փոփոխվել ծրագրի կողմից։ `true`, `false` և `nil` փսևդոփոփոխականները singleton կաղապարի նմուշներ են։ `self`-ը և `super`-ը համապատասխանաբար կապված են հաղորդագրություն ուղարկող օբյեկտին և այդ օբյեկտի դասի ծնող դասին։ `thisContext`-ը կապված է մեթոդի ընթացիկ ակտիվացիայի կադրին։ Լեզվի միակ ներդրված կառուցվածքներն են հաղորդագրության ուղարկումը, վերագրումը, մեթոդից արժեքի վերադարձը և օբյեկտի լիտերալային գրառումը։ Քանի որ Smalltalk-ը նախագծվում էր որպես բոլոր տարիքի երեխաների համար ծրագրավորման լեզու, կետադրությունը նրանում ավելի նման է անգլերենի կետադրությանը, այլ ոչ թե տարածված ծրագրավորման լեզուներում ընդունված կետադրությանը։ Լեզվի մյուս բոլոր կառուցվածքները, ներառյալ ճյուղավորման ու կրկնման կառուցվածքները, իրականացված են լեզվի ներդրված տարրերի օգնությամբ։

Ասացվածքը, թե «Smalltalk-ի շարահյուսությունը տեղավորվում է փոստային բացիկի վրա», կարելի է ցուցադրել Ռալֆ Ջոնսոնի գրած կոդի հատվածի օգնությամբ, որում ցուցադրված են մեթոդների բոլոր ստանդարտ շարահյուսական տարրերը.

```smalltalk
exampleWithNumber: x
    | y |
    true & false not & (nil isNil) ifFalse: [self halt].
    y := self size + super size.
    #($a #a "a" 1 1.0)
        do: [ :each |
            Transcript show: (each class name);
                       show: ' '].
    ^x < y
```


### Փոփոխականների հայտարարումը
Smalltalk լեզվում օգտագործվում են երկու տեսակի փոփոխականներ՝ դասի անդամներ և լոկալ փոփոխականներ։ Լոկալ (ժամանակավոր) փոփոխականները հայտարարվում են մեթոդի մարմնի սկզբում՝ իրարից բաժանված բացատներով և ընդգրկված ուղիղ գծիկների մեջ։ Օրինակ, հետևյալ կերպ հայտարարված է `index` և `vowels` անունով փոփոխականները.


```smalltalk
| index vowels |
```


### Վերագրումը
Փոփոխականին արժեք է վերագրվում `:=` գործողությամբ։ Այսինքն.


```smalltalk
vowels := 'aeiou'
```


արտահայտությունը նախապես հայտարարված `vowels` փոփոխականին վերագրում է `'aeiou'` տողը։ Տողն օբյեկտ է, որը կոմպիլյատորի կողմից ստեղծվում է կոմպիլյացիայի ժամանակ։

### Հաղորդագրությունները
Հաղորդագրությունը Smalltalk լեզվի հիմնարար կառուցվածքն է։ Նույնիսկ ղեկավարող կառուցվածքներն են իրականացված հաղորդագրությունների ուղարկման միջոցով։

Հետևյալ օրինակում `42` թվին ուղարկվում է `factorial` հաղորդագրությունը.


```smalltalk
42 factorial
```


Այս դեպքում `42` կոչվում է հաղորդագրությունն *ընդունող*, իսկ `factorial`-ը հաղորդագրության *տարբերակիչ* (selector)։ Ընդունողը հաղորդագրությանն արձագանքում է արժեք վերադարձնելով։ Հաղորդագրության արդյունքը կարելի է վերագրել փոփոխականի.


```smalltalk
aRatherBigNumber := 42 factorial
```


## Ծանոթագրություններ

Կատեգորիա:Օբյեկտ կողմնորոշված ծրագրավորման լեզուներ