]]> ]]>
Править | Обсудить | История

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: [...]

IDE/Редакторы:

Примеры:

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.1
a := (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.1
text := 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

]]>

Работа программистам