Вопрос

SmallTalk (особенно Squeak / Pharo) имеет некоторую форму вариадических функций?

Я просто читал о силе проектирования собственной контрольной атации в Smalltalk, и в то время как я большой поклонник IFTRUE: iffalse: у меня было трудно приступить к хорошему способу реализации произвольным, если, если еще, если , другие заявления, думая, как полезные вариационные функции будут для выполнения операторов дела. Что-то типа

ложный класс

ifTrue: aBlock (... elseIf: aBoolean then: aSecondBlock ...) else: aLastBlock

vArgList pairsDo: [:x :y| x ifTrue:[^ (y value)] ].
^ aLastBlock
Это было полезно?

Решение

Вы можете использовать #caseOf:otherwise: сообщение. Ищите какой-нибудь отправитель этого сообщения для определенного примера.

Но в любом случае, если вы хотите использовать оператор Case, вы не следите за мелкими способами дела. Расскажите нам, что вы хотите достичь с вашим заявлением об этом, чтобы мы могли показать вам немного чистого способа сделать это.

Другие советы

Синтаксис по ключевым словом SmallTalk по ключевым словам для метода, по своей природе определяет артую метода. Нет никаких &rest Узор, как в общем лиспе.

Вы можете, конечно, есть метод взять список, как BlockClosure>>valueWithArguments: Но это вряд ли одно и то же.

Вы можете изменить Compiler Поддерживайте вариационные вызовы методов. Может быть, звонок будет просто иметь with: между каждой из переменных:

(Состояние) IFTRUE: ABLOCK ELSEIF: ABOOLEAN с: isecondblock с: staryboolean с: Athirdblock

Одна из вещей, которые я узнал в программировании, не так ли вам не нуждаются в случаях, вы не хочу Деловые заявления.

Заявления о случаях - это способ раздувания объекта. Когда вы используете его, вы унижаете обслуживание. Вы будете иметь все возможности, которые вы хотите в то время, но в тот день, когда вы хотите добавить то, что вам придется просмотреть неприятный код, когда вы больше не помните тонкости ответственности за этот объект, так что вы будете раздувать его даже больше.

В очень короткие сроки они выглядят дружески, но отказа от случаев не ваши друзья. Они укушет вас в долгосрочной перспективе.

Также они делают ваш код менее гибким. Например, вы не можете добавить случай уверенно в предыдущем коде. Вы вынуждены просмотреть старый код, когда вы больше не помните, почему он был так закодирован.

Заявления о случаях являются врагами хорошего кода.

Если у вас есть что-то, что выходит за рамки IFTRUE: iffalse: то правильная вещь, чтобы сделать, это сделать для этого состояния. Так что вы делаете, это реализовать три класса, которые очень просты, и все они понимают какой-то глагол.

Скажи, #dothenextthing. Таким образом, когда объект получает сообщение, которое он делегает в состояние (в зависимости от того, в зависимости от того, что один из этих 3 (или 30, так что запишите этот масштабный сложность)) и государство знает, как сделать оригинальный приемник правильно реагировать.

Это оставит ваш код света, очевидным и очень ремонтом. Вы сможете забыть об этом, потому что вы знаете, что когда вы снова смотрите на него, все настолько очевидно, вам не нужно думать в прошлом вашего кода как в будущем вашего кода.

Это важно, потому что ваша память является самой дорогой памятью, которую у вас есть, и AFAIK не обновляется. Таким образом, эта техника позволяет делать более мощные вещи.

Рядом, что делает 3 класса, может звучать как больше работы для некоторых, но нет. Любой нуб может добавлять 3 пустых класса в мигании, но только правильный эксперт запомнит, как было сделано заявление о случаях в старом коде, как было сделано. И если вы дико оптимистичны, это займет минуты, чтобы вспомнить, что вы все знаете, что делать дальше. Подумай об этом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top