Форум программистов, компьютерный форум, киберфорум
Node.js
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
Заблокирован

Преизобретение ООП

05.03.2017, 13:33. Показов 1909. Ответов 30

Студворк — интернет-сервис помощи студентам
В nodejs очень распространенной конструкцией является такая:

JavaScript
1
foo.on("bar", function(bar){...})
Это забавный пример того, как люди пытаются "убежать" от ООП и при этом заново его изобретают, только в примитивной форме.

Эти конструкции приблизительно эквивалентны вот таким:

JavaScript
1
foo.onBar = function(){}
Только мы не можем обратится из коллбека напрямую к получателю, и у нас почти напрочь отлетает полиморфизм и наследование, а код становится лапшевидным, плохо структурированным.

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

PS Впрочем, эта чума распространяется и на браузерный JS. Конструкции подобные addEventListener -- из той же оперы. И особенно библиотеки, жеквери и тому подобное -- квинтессенция убогого дизайна
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.03.2017, 13:33
Ответы с готовыми решениями:

ООП ради ООП
Доброго времени суток! Есть к примеру класс Cat который реализует интерфейс Movable, инкапсулирует цвет, и прочее. Имеет ли смысл...

ООП
Объясните кто-нибудь, пожалуйста, что такое конструкторы/деструкторы и для чего они нужны. До меня все никак не доходит, что значит...

ООП
Привет всем, народ дайте какую-нибудь интересную задачку на ООП, (однообразные задачи из учебников достали уже), чтоб она затрагивала как...

30
супермизантроп
Эксперт JS
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,629
05.03.2017, 14:30
Цитата Сообщение от oopguru Посмотреть сообщение
И особенно библиотеки, жеквери и тому подобное -- квинтессенция убогого дизайна
в свете написанного вами интересно будет узнать вашу интерпретацию понятия "дизайн"
походу, она сильно отличается от общепринятого понимания этого термина
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
09.03.2017, 17:49
oopguru, интересно. Покажите, как это в C# можно из колбека получить доступ к получателю.

Асинхронный запрос:

C#
1
2
3
4
5
6
7
8
9
10
11
s.BeginReceive(so.buffer, 0, StateObject.BUFFER_SIZE, 0, 
                    new AyncCallback(Async_Send_Receive.Read_Callback), so);
 
public static void Read_Callback(IAsyncResult ar)
{
    StateObject so = (StateObject) ar.AsyncState;
    Socket s = so.workSocket;
 
    int read = s.EndReceive(ar);
 
}
Вообще я сейчас уже и запутался. Как это вообще получить доступ к получателю?

Добавлено через 1 минуту
Мои нейроны сейчас сломаются обдумывая эту херь)

Добавлено через 5 минут
oopguru,
JavaScript
1
foo.on("bar", function(bar){...})
Кто так вообще делает в 17 году?
0
Заблокирован
09.03.2017, 17:59  [ТС]
Цитата Сообщение от Randen Посмотреть сообщение
как это в C# можно из колбека получить доступ к получателю
А при чем тут C#? Я его вообще говоря, не знаю, но думаю, что это там невозможно, потому что там нет динамического связывания, скорей всего. В JS это вполне возможно через this. Ведь обычная, дефолтная конфигурация обьектов в js это предусматривает. Типа
JavaScript
1
xhr.onreadystatechange = myFunction
Добавлено через 1 минуту
Цитата Сообщение от Randen Посмотреть сообщение
Кто так вообще делает в 17 году?
В nodejs почти все через эту жопу сделано
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
09.03.2017, 18:11
oopguru, у меня нет никаких проблем вообще.
От лапши избавился с помощью async/await

JavaScript
1
2
3
4
5
6
7
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
    }
  }
И где здесь из колбека напрямую обращение к получателю? Я ведь даже не понимаю что это значит вообще. Потому что по вашим словам есть какая-то проблема в js. Но я её не вижу. Нарисуйте мне её.
0
Заблокирован
09.03.2017, 18:29  [ТС]
Цитата Сообщение от Randen Посмотреть сообщение
И где здесь из колбека напрямую обращение к получателю?
вот тут
Цитата Сообщение от Randen Посмотреть сообщение
xmlhttp.responseText
можно заменить обращение через глобальный объект на
JavaScript
1
this.responseText
Так, например, вы можете использовать одну и ту же функцию для нескольких xhr. This всегда обращается к получателю.

Добавлено через 3 минуты
Цитата Сообщение от Randen Посмотреть сообщение
Потому что по вашим словам есть какая-то проблема в js
скорей не в js, а в том что инструменты реализуют криворукие мартышки.
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
09.03.2017, 18:38
oopguru, т.е. по вашему в NODE.JS именно проблема?

К вашему сведению, node.js основан на движке V8 от гугл хром. Все что можно в браузере, можно и в node.js.

Теперь еще раз. Какие проблемы?

Добавлено через 36 секунд
Специально для вас:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
var myClass = {
    method1: function() {
        console.log(this);
        console.log(this.property1);
    },
    method2: () => {
 
    },
    property1: 'lol'
};
 
myClass.method1();
0
Заблокирован
09.03.2017, 18:39  [ТС]
Цитата Сообщение от Randen Посмотреть сообщение
Теперь еще раз. Какие проблемы?
я ведь не попугай, чтобы повторять одно и то же
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
09.03.2017, 18:40
Цитата Сообщение от oopguru Посмотреть сообщение
я ведь не попугай, чтобы повторять одно и то же
конечно нет. Вы должны ответить на этот вопрос после анализа моего поста
0
Заблокирован
09.03.2017, 18:40  [ТС]
Цитата Сообщение от Randen Посмотреть сообщение
Специально для вас:
вы просто продемонстрировали свою некомпетентность в в вопросе. Для меня тут ничего нет, извините
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
09.03.2017, 18:43
oopguru, хах. Вы утверждаете что в инструменте под названием Node.js есть недостатки.
Продемонстрируйте их, иначе вы пустослов.
0
Заблокирован
09.03.2017, 18:44  [ТС]
Randen, я уже назвал основной недостаток: это мартышки, которые переизобретают кастрированный вид ООП там где есть нативный. Ничего нового добавить не могу.
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
09.03.2017, 19:01
oopguru, node.js тут не причем.

Все жалобы должны быть направлены на стандарт ECMAScript

Добавлено через 10 минут
oopguru,
Только мы не можем обратится из коллбека напрямую к получателю
Потом вы говорите
Цитата Сообщение от oopguru Посмотреть сообщение
В JS это вполне возможно через this
Я привожу пример, в котором на node.js это можно сделать, а вы говорите

Цитата Сообщение от oopguru Посмотреть сообщение
вы просто продемонстрировали свою некомпетентность в в вопросе
Вы адекватный вообще?
0
Заблокирован
09.03.2017, 19:11  [ТС]
Цитата Сообщение от Randen Посмотреть сообщение
Потом вы говорите
только не через стандартные интерфейсы nodejs
Цитата Сообщение от Randen Посмотреть сообщение
Все жалобы должны быть направлены на стандарт ECMAScript
он тут не при чем. разработчики стандарта не могут стоять над каждой мартышкой, разрабатывающей фреймверк или либу.

Добавлено через 48 секунд
Цитата Сообщение от Randen Посмотреть сообщение
Я привожу пример
да Вы вообще не поняли сути темы.
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
09.03.2017, 19:15
Цитата Сообщение от oopguru Посмотреть сообщение
только не через стандартные интерфейсы nodejs
Не знаю откуда вы набрались этой инфы. Но у меня только стандартный интерфейс node.js. Я даже и не подозревал что есть нестандартные.)

Установочник скачанный с офф сайта. Я больше ничего не добавлял.
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
09.03.2017, 20:13
oopguru, вообще вопрос такой: вы эту тему создали для того, чтобы всех js'еров обосрать за то, что у них своя реализация ООП? Не нашли темы получше? Да, в js другая реализация и использование ооп, у нас даже классы создаются через прототипы и что? Какая нафиг разница?

Если прицепится именно к тому примеру, который вы привели в первом посте, то такое назначение обработчика сделано вот по какой причине: таким образом на одно и то же действие можно поставить несолько обработчиков, и такое поведение очень удобно для тех программистов, которые работают на nodejs. Ибо ЕventEmmiter является достаточно удобной вещью.

Добавлено через 2 минуты
Цитата Сообщение от oopguru Посмотреть сообщение
библиотеки, жеквери и тому подобное -- квинтессенция убогого дизайна
JQ, насколько мне известно, сделан аля singelton.

Добавлено через 3 минуты
Все эти нападки у меня вызывают только смех. Ибо это ЯП, его уже не изменить.
Если хотите звиздец какой грубый пример, который покажется вам очень сильно применимым к данной ситуации, но таковым не является, то я его представлю: это как смеяться над одноруким за то, что у него нету руки. Это как смеяться над слепым за то, что он не может выбрать красный квадрат из 4 представленых.
Это ЯП, он принят комитетом, его изменять будут только в следующем году, и координально его изменять не будут, ибо обязательно должна быть обратная совместимости и возможность костылированияполифилирования.

Добавлено через 1 минуту
Таким же образом я могу смеятся над тем же php или perl за нотацию их переменных или над фортом за его нотацию математических выражений.

Добавлено через 3 минуты
Конечно всегда можно быть идиалистом и пытаться постоянно следовать парадигмам, но по факту это по большей части либо нахрен не нужно (особенно человеку, который пришёл для того, чтобы включить галерею на сайте), либо слишком сложно (именно по этому у js достаточно малый порог вхождения, потому что не надо задумываться обо всяких парадигмах да паттернах, правда это в разы увеличиывает процентное содержание говнокода к остальному коду, но это не отпугивает начинающих, чего не скажешь о тех же плюсах).
0
Заблокирован
09.03.2017, 20:14  [ТС]
BANO, Нет, Вы не поняли. Проблема не в ООП-модели JS, она, как раз далеко не самая плохая. Проблема в том, что используют ее криво, и пилят совершенно неадекватные интерфейсы, ортогональные нативной модели.
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
09.03.2017, 20:16
oopguru, повторюсь,
Цитата Сообщение от BANO Посмотреть сообщение
таким образом на одно и то же действие можно поставить несолько обработчиков
Именно поэтому сделали addEventListener, который появился много раньше всяких там on и emit.
0
Заблокирован
09.03.2017, 20:22  [ТС]
Цитата Сообщение от BANO Посмотреть сообщение
то такое назначение обработчика сделано вот по какой причине: таким образом на одно и то же действие можно поставить несолько обработчиков
не уверен.
JavaScript
1
2
3
request = http.request
request.on(''data", function(response){response.on("data", function(data){кстати, нахрен этот ответ вообще идет из коллбека, почему его явно нельзя определить?})})
request.on("error" etc)
Где Вы тут несколько обработчиков увидели? request и response отрабатывают однократно, как и xhr

Дело тут не в бобине, просто [cencored] сидят в кабине
0
Ренегат
Эксперт HTML/CSS
 Аватар для BANO
1740 / 1085 / 386
Регистрация: 06.08.2014
Сообщений: 5,203
Записей в блоге: 1
09.03.2017, 20:27
oopguru, прикол в том, что в ноде всё сделанно изначально так, ибо там оооочень часто используются всяко разные хуки да перехваты. Да и обработчики всё же могут быть множественные, в данном вами случае вообще какой-то странный способ использования pipe'а. В пайпах специально придуманы такие вещи как .pipe().
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.03.2017, 20:27
Помогаю со студенческими работами здесь

C++ ООП
Просьба дать какую-нибудь интересную программу, дабы теста на курс ООП. Чтобы не из книжки, а реально придуманная про программистом, или...

JS ООП
Есть функция, создающая объект. Код: var object = function () { var prop1 var prop2 function method1(a) {

ООП
Всем привет! Если можно, не могли бы вы ответить на пару вопросов по ООП, а то что-то не могу понять. Вопросы: Зачем используются такие...

ООП в С++
Здравствуйте! Ответьте пожалуйста на несколько вопросов... p.s. буду рад , если ответы будут сопровождаться примерами :) Хочу...

ООП в Qt
Добрый день Есть пара вопросов: 1. В программе будет множество заголовочных файлов, в которых должны использоваться значения с формы(с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru