Smalltalk
- Дата создания:
- 1970-е годы
- Создан под влиянием:
- Повлиял на:
- Парадигма:
- Типизация:
- Принятые расширения файлов:
- .st
- Диалекты:
- Реализации и версии (свернуть все | развернуть все):
Smalltalk — объектно-ориентированный язык программирования с динамической типизацией, разработанный в Xerox PARC Аланом Кэйем, Дэном Ингаллсом, Тедом Кэглером, Адель Голдберг, и другими в 1970-х годах. Язык был представлен как Smalltalk-80 и с тех пор широко используется. Smalltalk продолжает активно развиваться и собирает вокруг себя преданное сообщество пользователей.
Smalltalk оказал большое влияние на развитие многих других языков, таких как: Objective-C, Actor, Java и Ruby. Многие идеи 1980-х и 1990-х по написанию программ появились в сообществе Smalltalk. К ним можно отнести рефакторинг, шаблоны проектирования (применительно к ПО), карты Класс-Обязанности-Взаимодействие и экстремальное программирование в целом. Основатель концепции Wiki, Вард Каннингем, также входит в сообщество Smalltalk.
Элементы синтаксиса:
Комментарии, которые могут быть вложенными | " ... " |
---|---|
Регистрозависимость | да |
Регулярное выражение идентификатора переменной | [a-zA-Z][a-zA-Z0-9]* |
Присваивание значения переменной | var := value. |
Объявление переменной | | variable1 variable2 ... | |
Объявление переменной с присваиванием значения | | var | var := value. |
Группировка выражений | ( ... ) |
Блок | [ x. y. ... ] |
Равенство | == |
Неравенство | ~~ |
Тождественное равенство | = |
Тождественное неравенство | ~= |
Сравнение | < > <= >= compare |
Определение функции | f ... или f: p1 ... |
Вызов функции | a f |
Вызов функции без параметров | f value |
Последовательность | . |
Если - то | condition ifTrue: ... |
Если - то - иначе | condition ifTrue: ... ifFalse: ... |
Цикл с предусловием | condition whileTrue: ... |
Цикл с постусловием | [ ... . condition] whileFalse |
Цикл for - next для диапазона целых чисел с инкрементом на 1 | 1 to: 10 do: [...] или 1 to: 10 by: 1 do: [...] |
Цикл for - next для диапазона целых чисел с декрементом на 1 | 1 to: 10 by: -1 do: [...] |
Ссылки:
Примеры:
Hello, World!:
Пример для версий gst 3.1'Hello, World!' printNl.
Факториал:
Пример для версий gst 3.1В классе Number есть встроенный метод factorial
, который здесь и используется.
0 to: 16 do: [ :i |
i display.
'! = ' display.
i factorial displayNl
].
Числа Фибоначчи:
Пример для версий gst 3.1Используется итеративное определение чисел Фибоначчи.
a1 := 0.
a2 := 1.
0 to: 15 do: [ :i |
a2 display.
t := a1 + a2.
a1 := a2.
a2 := t.
', ' display
]
'...' displayNl.
Квадратное уравнение:
Пример для версий gst 3.1a := (stdin nextLine) asNumber.
(a == 0)
ifTrue: [
'Not a quadratic equation.' displayNl.
]
ifFalse: [
b := (stdin nextLine) asNumber.
c := (stdin nextLine) asNumber.
d := (b * b) - (4 * a * c).
(d == 0)
ifTrue: [
'x = ' display.
((-1)*b/2/a) displayNl.
]
ifFalse: [
(d > 0)
ifTrue: [
'x1 = ' display.
((-1)*b+(d sqrt)/2/a) displayNl.
'x2 = ' display.
((-1)*b-(d sqrt)/2/a) displayNl.
]
ifFalse: [
'x1 = (' display.
((-1)*b/2/a) display.
',' display.
((d abs sqrt)/2/a) display.
')' displayNl.
'x2 = (' display.
((-1)*b/2/a) display.
',' display.
((-1)*(d abs sqrt)/2/a) display.
')' displayNl.
].
].
].
CamelCase:
Пример для версий gst 3.1text := stdin nextLine asLowercase.
text := text replacingAllRegex: '([^a-zA-Z]+)' with: ' '.
cc := ''.
text onOccurrencesOfRegex: '\b(\w+)\b' do: [ :each |
word := each match.
cc := cc,((word copyFrom: 1 to: 1) asUppercase),(word copyFrom: 2 to: (word size)).
].
cc displayNl.
Комментарии
]]>blog comments powered by Disqus
]]>