Pull to refresh
2
0
Dmitry Soshnikov @dsCode

User

Send message
> Был вопрос: «В каком языке ООП это просто ходьба без костылей и палочек?»

В вопросе мало смысла.

> Вы мне говорите про какую-то реализацию.

Что значит, про «какую-то»? Про вполне конкретную — Си-шарповую. И отмечаю, что реализация ООП в этом языке — одна из нескольких.

> Я для примера назвал C#.

Ну замечательно, только, повторю, в вопросе мало смысла, если Вы полностью этот тред проанализируете и увидите мою позицию.
> Нет
Что, «нет»? ООП в C# — это одна из реализаций, не претендующая на единственно верную. Что не так?

> Соответственно если говорить, что ООП ходьба с костылями — то все программирование на C# — костыли.

Я, если Вы внимательно читали, как раз и ратую за то, чтобы не раскидываться тут, «что такое костыли, а что нет» (при этом, даже не являясь создателями этих систем).
Спасибо за подробный ответ, да, я тоже повторю, что меня привлекает динамика, мутации объектов, утиная типизация в Ruby и JS (Смоллток тоже находится в их генеалогическом дереве вдохновения идеологией, включая реализацию ООП — однако, конечно же, были сделаны свои и изменения).

Подчеркнуть же я хочу то, что говорить о «костылях» смысла нет, поскольку для этого нужен утверждённый эталон «дальше которого прыгать в стороны не моги», но в плане реализаций теоретических областей — это не так. Реализация ООП из Смоллтока, унаследованная Руби, Питоном и JS (через связку Smalltalk -> Self -> JS) снова повторю, мне так же наиболее симпатична (при этом, я осознаю, что сам Смоллток тоже вдохновлялся Симулой, но ввёл свои нововведения, которые посчитал технологически и идеологически обоснованными).
Смоллток — тоже, всего лишь — одна из реализаций. Любая другая — вправе вносить любые коррективы, если они технологически и идеологически обоснованы.

> прочувствовал ООП только после него.

Расскажите подробней (основные, ключевые моменты, которые заставили вас «прочувствовать»), интересно.
В C#, всего лишь — одна из реализаций.
В Руби, всего лишь — одна из реализаций. Достаточна неплохая, надо сказать.
> Что вы имеете ввиду под словами «технические характеристики»?

Реализацию.

> Проще попробовать

Я достаточно хорошо знаю и PHP и Ruby.

> чем рассказывать

тот, кто не знает, не сможет объяснить.

Меня же больше волнует то, каков процент в Ваших фразах о «костылях» — свой? К слову, я отмечу, что мне Руби, действительно (наряду с JS и Python'ом), нравятся больше PHP, но я могу ответить, почему — в большей мере привлекает динамика, открытость (хотя, Питон, в этом плане, закрыт для работы со встроенными классами), мутация (и, как следствие, утиная типизация) объектов, и модульная структуризация. ООП же в PHP — достаточно неплохая реализация этой теоретической парадигмы.

Фишка в том, что когда выражают больше не своё мнение в этом вопросе, рассказывают больше не о том, как хорош Руби, а о том, как PHP уныл. При детальном же анализе, выясняется, что рассказывающий весьма поверхностно знает — и PHP, и Ruby.

Так о чём говорите Вы?
> Удобство работы с ООП в PHP в сравнении с оным в Ruby — это как ходьба по улице с костылями или палочкой, на которую опираешься,

ну это всё демагогическая философия, а технические характеристики, всё-таки, можете рассказать? ;)

В PHP — своя реализация ООП, достаточно неплохая в своей идеологии, удобная для реюза кода. Кстати, в Руби, ООП похоже на Javascript'овое.
Да нет, у Вас упор всё же на PHP-вакансию, всё остальное (SQL, JS, CSS) — поверхностно получится, в любом случае (хотя, могут быть исключения, но такой девелопер (который глубоко разбирается в нескольких технологиях, а не просто на прикладном уровне) дороже стоит и надо ещё поискать).

Касаемо же JS, ответом на Ваш вопрос должен быть: «что значит реализовать наследование? наследование в этом языке заложено изначально и весь язык — напишите Вы одну строчку 1..toString() — уже насквозь пропитан наследованием. Поэтому, вопрос не понятен/не корректен». Поэтому, при серьёзной JS-вакансии, такие вопросы лучше не задавать (сами спалитесь). В случае же, когда JS — второстепенен (т.е. основное направление вакансии — PHP), Ваша формулировка может быть уместна.
> Каким образом можно реализовать наследование в Javascript?

В принципе, для соискателя для на PHP вакансию, такой формулировки может быть и достаточно, хотя, она, конечно, неверная — Вы же не спрашиваете, «каким образом можно реализовать наследование в PHP?» — а ведь это тоже самое. Если будете проводить интервью на JS вакансию, не задавайте такой вопрос вообще.
Ну, под «что тут думать?» я больше имел в виду, не то, как «тут всё просто в 11.1.4, что вы тут думаете?», а, что «не надо выдумывать ничего, когда есть точное описание». Сам же этот раздел не такой и простой, чтобы увидеть всю картину при беглом просмотре.
> В какой-то степени оба поведения мне кажутся логичными, а вы как думаете?

А что тут думать? Черным по белому — в спецификации это поведение описано. IE не прав в данном случае. См. 11.1.4.
> при помощи вы не поверите ЗАПЯТОЙ

ой, не поверим ;)
А в данном случае, всё верно — в соответствии со спецификацией. А в случае примера, IE — не прав, длин должна быть 3. См. 11.1.4.
> Откройте Флэнагана, раздел массивы

Откройте ECMA-262-3, 11.1.4 Array Initialiser. В случае примера, длина, всё же, должна быть 3.
> Как по мне, IE ведет себя правильно, а Firefox нет

По спецификации, нет: IE — не прав, Fx — прав.
11.1.4. Array Initialiser
Array elements may be elided at the beginning, middle or end of the element list. Whenever a comma in
the element list is not preceded by an AssignmentExpression (i.e., a comma at the beginning or after
another comma), the missing array element contributes to the length of the Array and increases the index
of subsequent elements
. Elided array elements are not defined.

Т.е. IE прочитал эту часть и решил всё время ей следовать (при нахождении пропуска, увеличивать длину массива на 1), однако, IE не учёл следующий алгоритм:
The production ArrayLiteral: [ ElementList, Elisionopt ] is evaluated as follows:
1. Evaluate ElementList.
2. Evaluate Elision; if not present, use the numeric value zero.
3. Call the [[Get]] method of Result(1) with argument «length».
4. Call the [[Put]] method of Result(1) with arguments «length» and (Result(2)+Result(3)).
5. Return Result(1).

Т.к. Result(2) должен быть ноль.

Поэтому, IE, по спецификации, не прав.
> Такая же как и с массивом — ошибок нет

С объектами, ошибка есть.
> Правильный вариант с временной переменной, он обычно всегда рекомендуется, да и код красивее получается

Скорее, всего лишь Ваша локальная привычка. Как и тех, кто рекомендует.

> Правильный вариант

Привычный

> честно говоря, уже привык к нему

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity