Ещё вопросик есть.
Никак не могу понять, что они хотели этим сказать? Generally you should avoid using \ct{do:}, unless you want to send messages to each of the elements of a collection. -- http://groups.google.ru/group/sugr |
Я думаю, они имели ввиду использовать do только для тех случаев, когда
надо просто послать определённое сообщение каждому элементу коллекции. Если в блоке, переданном #do:, будет какое-нибудь очень хитрое поведение (например, зависимость от состояния предыдущего элемента из коллекции), но (ИМХО) тут уже нужен не #do: :) 2010/10/20, George Herolyants <[hidden email]>: > Ещё вопросик есть. > Никак не могу понять, что они хотели этим сказать? > > Generally you should avoid using \ct{do:}, unless you want to send > messages to each of the elements of a collection. > > -- > http://groups.google.ru/group/sugr -- http://groups.google.ru/group/sugr |
Да в общем, непонятно. Тогда бы уж написали "если вам не нужен
результат вычисления блока" или что-то в этом роде. А то просто сложно в St представить себе ситуацию, когда не надо послать сообщение :). Эта строчка стоит в контексте сравнения do: и collect: так вот, по-моему, в плане необходимости посылки сообщения они никак не отличаются :). 20 октября 2010 г. 15:21 пользователь Dmitry Matveev <[hidden email]> написал: > Я думаю, они имели ввиду использовать do только для тех случаев, когда > надо просто послать определённое сообщение каждому элементу коллекции. > > Если в блоке, переданном #do:, будет какое-нибудь очень хитрое > поведение (например, зависимость от состояния предыдущего элемента из > коллекции), но (ИМХО) тут уже нужен не #do: :) > > 2010/10/20, George Herolyants <[hidden email]>: >> Ещё вопросик есть. >> Никак не могу понять, что они хотели этим сказать? >> >> Generally you should avoid using \ct{do:}, unless you want to send >> messages to each of the elements of a collection. >> >> -- >> http://groups.google.ru/group/sugr > > -- > http://groups.google.ru/group/sugr -- http://groups.google.ru/group/sugr |
Ладно, вот ещё задачка :)
The class \clsindmain{Dictionary} clearly illustrates that the collection hierarchy is based on subclassing and not subtyping. В общем, я понимаю, что они хотят сказать. И я даже согласен с ними :), но как это коротко сказать по-русски? -- http://groups.google.ru/group/sugr |
Возможный вариант перевода.
Класс Dictionary наглядно показывает, что иерархия коллекций основана на подклассах, а не на типах. 2010/10/20 George Herolyants <[hidden email]> Ладно, вот ещё задачка :) -- http://groups.google.ru/group/sugr |
Ну в общем да, это почти дословно переводит фразу, но, к сожалению, не
доносит её смысла. А смысл таков, что наследование реализации -- плохо, и непоследовательное следование принципу подстановки тоже плохо (там у них дальше был пример с Set'ом и Dictionary на эту тему). И вот как это коротко сказать по-русски... -- http://groups.google.ru/group/sugr |
In reply to this post by George Herolyants-3
Я думаю, что там имелось в виду, что #do: не следует использовать,
если только мы не хотим ПРОСТО/ТОЛЬКО ЛИШЬ послать сообщение каждому объекту коллекции. Ну в смысле, что не стоит делать штуковины вроде res:=OrderedCollection new. arr do:[:entry| entry isGood ifTrue:[res add: entry]]. или там res:=0. arr do:[:entry| res:=res+entry asInteger]. или ещё чего-нибудь в таком роде, что очень часто принимаются делать "опытные Java/C++ программисты". И хорошо ещё, если это не будет некий монстр типа (1 to: arr size) do:[:i| (arr at: i)....] -- http://groups.google.ru/group/sugr |
In reply to this post by George Herolyants-3
Ой, а можно более подробно эту общетеоретическую часть? Ну или сылки,
где почитать? А то я не понял ваших слов про "наследование реализации" и "следование принципу подстановки". Как впрочем и оригинальную фразу про subtyping и subclassing. -- http://groups.google.ru/group/sugr |
http://en.wikipedia.org/wiki/Implementation_inheritance
http://en.wikipedia.org/wiki/Liskov_substitution_principle Вот, а вообще у них там дальше идёт такой пример с Dictionary и Set'ом: "Хотя Dictionary является подклассом класса Set, мы, скорее всего, не станем использовать Dictionary там, где ожидаем Set." Т.е. (как я это понимаю), классы коллекций выстроены в чёткую иерерархию, но не вполне совместимы по интерфейсам. Т.е. сообщения, используемые для одних коллекций фактически не имеют смысла для других. Я где-то даже встречал классы в середине иерархии, которые переопределяют метод суперклассов, выбрасывая исключение, т.к. для этой коллекции этот метод использовать нельзя. Вот и получается, что они скорее повторно используют внутренние особенности реализации, чем порождают подтипы. 22 октября 2010 г. 4:26 пользователь Assargadon <[hidden email]> написал: > Ой, а можно более подробно эту общетеоретическую часть? Ну или сылки, > где почитать? А то я не понял ваших слов про "наследование реализации" > и "следование принципу подстановки". Как впрочем и оригинальную фразу > про subtyping и subclassing. > > -- > http://groups.google.ru/group/sugr -- http://groups.google.ru/group/sugr |
По-моему как раз из-за таких "кривых" моментов в реализации коллеций, существуют много попыток их переписать. На последнем есуге показывали реализацию на трейтах, не помню как называлась.
26 октября 2010 г. 11:06 пользователь George Herolyants <[hidden email]> написал: http://en.wikipedia.org/wiki/Implementation_inheritance -- http://groups.google.ru/group/sugr |
In reply to this post by Yuriy Mironenko
res:=OrderedCollection new.
arr do:[:entry| entry isGood ifTrue:[res add: entry]]. или там res:=0. arr do:[:entry| res:=res+entry asInteger]. (1 to: arr size) do:[:i| (arr at: i)....] Ну а чего тут уж такого криминального 2010/10/21 Assargadon <[hidden email]> Я думаю, что там имелось в виду, что #do: не следует использовать, -- http://groups.google.ru/group/sugr |
In reply to this post by George Herolyants-3
Потому что коллекции в смолтолке очень хороши :))
26 октября 2010 г. 11:27 пользователь George Herolyants <[hidden email]> написал: А почему "кривых" в кавычках? -- http://groups.google.ru/group/sugr |
In reply to this post by Alex Kogan
26.10.10, Alex Kogan<[hidden email]> написал(а):
> res:=OrderedCollection new. > arr do:[:entry| entry isGood ifTrue:[res add: entry]]. > > или там > > res:=0. > arr do:[:entry| res:=res+entry asInteger]. > > (1 to: arr size) do:[:i| (arr at: i)....] > > Ну а чего тут уж такого криминального Это просто не Smalltalk way. Вместо первого - select:, вместо второго - inject:into:, вместо третьего - do:. -- http://groups.google.ru/group/sugr |
In reply to this post by Denis Kudriashov
2010/10/27 Denis Kudriashov <[hidden email]>
-- Потому что коллекции в смолтолке очень хороши :)) Java и С отдыхают :) http://groups.google.ru/group/sugr |
Это бесспорно :)
26 октября 2010 г. 23:36 пользователь Nikolay Kleptsov <[hidden email]> написал: > > > 2010/10/27 Denis Kudriashov <[hidden email]> >> >> Потому что коллекции в смолтолке очень хороши :)) >> > > Java и С отдыхают :) > > -- > http://groups.google.ru/group/sugr -- http://groups.google.ru/group/sugr |
In reply to this post by Denis Kudriashov
Мне кажется, не будет криминала, как-то прокомментировать это неоднозначное высказывание. Всегда можно сделать сноску с пометкой "комментарий переводчика". Еще, наверное, есть смысл задать уточняющий вопрос на одном из форумов, связанных с этой книгой. Полезно будет и автору оригинала --- если у читателя возникает непонимание, значит написано не очень хорошо.
Но конкретно по подклассам и подтипам в данной конкретной --- мне все таки не понятно, что здесь имеется ввиду. Особенно по поводу типов. Там понятие типа вводится вообще где-нибудь? Я не нашел. И ничего ни про принцип Лисковой, ни про то что наследовать ради повторного использования кода... А это вообще имеет отношение к сути рассматриваемого в данной главе вопроса? Ведь, как я понимаю, речь идет о коллекциях. Надо ли здесь путать читателя какими-то рассуждениями по теории объектного программирования? Я эти слова (будь я автором) вообще бы выкинул. 26 октября 2010 г. 11:15 пользователь Denis Kudriashov <[hidden email]> написал: По-моему как раз из-за таких "кривых" моментов в реализации коллеций, существуют много попыток их переписать. На последнем есуге показывали реализацию на трейтах, не помню как называлась. -- Dennis Schetinin -- http://groups.google.ru/group/sugr |
Free forum by Nabble | Edit this page |