В общем, как я понял, вся соль в том, чтобы сигнатура вызова в родительском и дочернем классах были совместимы. Мой пример в целом рабочий если мы говорим про JavaScript, так как там можно передавать в функцию больше параметров чем в ней объявлено. То есть
Square.draw(100, 100)
Не вызовет ошибки, не смотря на то, что метод ожидает только один аргумент. Таким образом вызывающий код может обрабатывать и "Квадрат" и "Прямоугольник" не зная точного типа.
Параметры методов можно расширить, но нельзя сузить.
А кто может пояснить почему так? Я вот когда детям показывал ООП, приводил простейший пример:
Есть класс "Прямоугольник" с методом "Нарисуй". "Нарисуй" принимает два аргумента: ширину и высоту.
От его наследуется класс "Квадрат" который изменяет метод "Нарисуй" и принимает только один параметр (что логично).
Как подобное решается на PHP?
Утвердили план заседаний, на которых обсудят вопросы разработки принципов и стандартов для проведения встречь с целью определения наилучшей стратегии создания и утверждения дорожной карты для внедрения 5G
Мне кажется это камень скорее в сторону дизайна.
Почему вашему пользователю нужно рассмотреть весь диалог, всю форму, чтобы понять что от него вообще хотят? Разве его предыдущие действия не привели его к этому окну? Если вы нажимаете на понятную кнопку "Подписаться" и попадаете в текстовое поле "Введите email" у вас не должно случаться конфуза. Другое дело, когда модалка выскакивает сама по себе, её внешний вид не расчитан на небольшие устройства, тогда да, всё что видит пользователь — одно текстовое поле. Но это не проблема юзабилити а следствие проблемы с дизайном, на мой взгляд.
Вы всё правильно делаете :) И в вашем примере, действительно, может использоваться ссылка. Но не все разработчики так хорошо понимают тонкости. Вот именно для тех кто не понимает разницы, или не думает о ней я и написал в столь категоричном ключе. Безусловно есть разные ситуации и исключения, но их понимание должно прийти с опытом.
Ссылка предполагает переход куда-то. Думая про ссылку, вы можете захотеть открыть её в новой вкладке, например, сохранить или переслать. Я считаю так: если компонент ссылается куда-то (на часть этого документа, на другой и т.д) то он может быть ссылкой. Но если он просто выполняет какие-то действия в пределах текущего документа — тогда это кнопка
Если коротко — для автоматизеции и уменьшения ручной работы.
Если чуть подробнее:
Источником всех типов являются .widl файлы. Они автоматически вытягиваются из браузера Edge. То есть, все веб интерфейсы пишутся не вручную а берутся из того, что имплементировано в браузере. Вот, описание MessageEvent, например.
Так можно быстро и легко отслеживать все изменения в спецификациях веб-платформы.
Многие такие интерфейсы должны быть представлены в нескольких библиотеках. Чтобы не приходилось согласовывать описание одного и того же интерфейса в разных библиотеках он вынесен в отдельный файл, а уже оттуда записывается в нужные библиотеки.
А в формате JSON просто описаны дополнительные инструкции о том, как конвертировать widl в ts
Это позволяет описать как все входящие так и исходящие сообщения
type MessageStart = 'start';
type MessageStop = 'stop';
type MessageProgress = 'progress'
type MessageInput = MessageStart | MessageStop
type MessageOutput = MessageProgress
const w = new Worker() as TypedWorker<MessageInput, MessageOutput>
w.addEventListener('message', m => {
m.data // 'start' | 'stop'
})
w.postMessage('some') // Type "some" is not assignable to type "MessageProgress"
Да, npm — это очень удобный инструмент. Но, я вижу некоторое недопонимание у сообщества. Хотя, не исключено, что ошибаюсь именно я.
Deno — это "переосмысление" Node. Именно Node. Не смешивайте с npm. Node — это среда исполнения, npm — менеджер пакетов и появился он примерно через пол года после первых выпусков Node. Сейчас они поставляются вместе из-за исторической необходимости. Ну, и вы сами видите реакцию сообщества на идею работы среды исполнения без комплектного менеджера пакетов.
Deno — именно прокачанная среда исполнения. Разница в том, что во времена создания модульной системы Node в языке не было ничего. А в Deno просто реализованы все современные возможности языка. Даже больше чем сейчас поддерживается в Node или в браузерах. Даже компиляторы по типу babel или typescript ограничены возможностями той среды в которой будет запускаться итоговый код.
Аналогия: использование функции require без необходимости предварительно вызывать установку пакета. Просто пишете название пакета, версию если нужно, или ссылку на другой источник. А резолвер модулей в Node сам найдет и кэширует необходимые пакеты. При таком раскладе, вам не нужен npm для установки или удаления пакетов.
Поймите, никто не говорит, что npm это зло и не призывает отказываться от него. Просто автор, сделал в свою новую среду исполнения с улучшенным резолвером модулей, что сделало не обязательным шаг по предварительной инициализации проекта и установке пакетов. Но никто не говорит что не появятся инструменты для анализа кода и сложного аудита всех зависимостей, или для запуска пресетов команд Deno и для всего остального что сегодня умеет npm.
Как обычно работаю я. Я просто пишу код. Когда использую какую-то функцию — моя IDE сама вставляет import. Если бы я работал с Deno, то этого было бы достаточно. Но работая с node, моя IDE должна ещё проверить установлен ли нужный пакет, и если нет — установить.
Я думаю, что большинство подобных вопросов — это дело привычки и отсутствия инструментов.
Я имел в виде существование линтера в целом. то о чем вы писали
Меня больше удивляет, когда сейчас разрабатывают новый язык позволяющий писать и так и эдак и тут же к нему прикладывают линтер, который не позволяет писать эдак
Есть, язык, который может работать как угодно. И есть инструмент, который можно настроить так, чтобы он ограничивал разработчика и принуждал его писать только эдак.
А вот настроить эти ограничения каждый может так как нужно именно ему. Что гораздо гибче.
А я вот понимаю такой подход. Сделать гибкий язык который может работать как угодно и предоставить инструмент, чтобы каждая команда могла "донастроить" его для своих нужд. Мне больше нравится когда всё строго, когда имена файлов и структура директорий жестко регламентирована интерпретатором. Но, как ты не крути, это нужно не всегда и часто в разном виде.
Deno, как и Node, умеет создавать lock.json. В нем будет список ссылок и хэш. Если при восстановлении зависимостей, хэш измененного файла не будет соответствовать сохраненному — Deno выдаст ошибку "Subresource integrity check failed" https://deno.land/manual/linking_to_external_code/integrity_checking
В общем, как я понял, вся соль в том, чтобы сигнатура вызова в родительском и дочернем классах были совместимы. Мой пример в целом рабочий если мы говорим про JavaScript, так как там можно передавать в функцию больше параметров чем в ней объявлено. То есть
Не вызовет ошибки, не смотря на то, что метод ожидает только один аргумент. Таким образом вызывающий код может обрабатывать и "Квадрат" и "Прямоугольник" не зная точного типа.
Демо.
А кто может пояснить почему так? Я вот когда детям показывал ООП, приводил простейший пример:
Есть класс "Прямоугольник" с методом "Нарисуй". "Нарисуй" принимает два аргумента: ширину и высоту.
От его наследуется класс "Квадрат" который изменяет метод "Нарисуй" и принимает только один параметр (что логично).
Как подобное решается на PHP?
Утвердили план заседаний, на которых обсудят вопросы разработки принципов и стандартов для проведения встречь с целью определения наилучшей стратегии создания и утверждения дорожной карты для внедрения 5G
Vite and VitePress — Evan You — VueConf Toronto 2020: (Слайды)
Мне кажется это камень скорее в сторону дизайна.
Почему вашему пользователю нужно рассмотреть весь диалог, всю форму, чтобы понять что от него вообще хотят? Разве его предыдущие действия не привели его к этому окну? Если вы нажимаете на понятную кнопку "Подписаться" и попадаете в текстовое поле "Введите email" у вас не должно случаться конфуза. Другое дело, когда модалка выскакивает сама по себе, её внешний вид не расчитан на небольшие устройства, тогда да, всё что видит пользователь — одно текстовое поле. Но это не проблема юзабилити а следствие проблемы с дизайном, на мой взгляд.
Вы всё правильно делаете :) И в вашем примере, действительно, может использоваться ссылка. Но не все разработчики так хорошо понимают тонкости. Вот именно для тех кто не понимает разницы, или не думает о ней я и написал в столь категоричном ключе. Безусловно есть разные ситуации и исключения, но их понимание должно прийти с опытом.
Ссылка предполагает переход куда-то. Думая про ссылку, вы можете захотеть открыть её в новой вкладке, например, сохранить или переслать. Я считаю так: если компонент ссылается куда-то (на часть этого документа, на другой и т.д) то он может быть ссылкой. Но если он просто выполняет какие-то действия в пределах текущего документа — тогда это кнопка
Это будет "палевно" только при условии, что владелец аккаунта сможет поднять достаточный резонанс.
Если коротко — для автоматизеции и уменьшения ручной работы.
Если чуть подробнее:
Так можно быстро и легко отслеживать все изменения в спецификациях веб-платформы.
А в формате JSON просто описаны дополнительные инструкции о том, как конвертировать widl в ts
Не совсем понял ваш вопрос
В моих проектах используется такой подход:
Это позволяет описать как все входящие так и исходящие сообщения
Deno FAQ
Да, npm — это очень удобный инструмент. Но, я вижу некоторое недопонимание у сообщества. Хотя, не исключено, что ошибаюсь именно я.
Deno — это "переосмысление" Node. Именно Node. Не смешивайте с npm. Node — это среда исполнения, npm — менеджер пакетов и появился он примерно через пол года после первых выпусков Node. Сейчас они поставляются вместе из-за исторической необходимости. Ну, и вы сами видите реакцию сообщества на идею работы среды исполнения без комплектного менеджера пакетов.
Deno — именно прокачанная среда исполнения. Разница в том, что во времена создания модульной системы Node в языке не было ничего. А в Deno просто реализованы все современные возможности языка. Даже больше чем сейчас поддерживается в Node или в браузерах. Даже компиляторы по типу babel или typescript ограничены возможностями той среды в которой будет запускаться итоговый код.
Поймите, никто не говорит, что npm это зло и не призывает отказываться от него. Просто автор, сделал в свою новую среду исполнения с улучшенным резолвером модулей, что сделало не обязательным шаг по предварительной инициализации проекта и установке пакетов. Но никто не говорит что не появятся инструменты для анализа кода и сложного аудита всех зависимостей, или для запуска пресетов команд Deno и для всего остального что сегодня умеет npm.
Как обычно работаю я. Я просто пишу код. Когда использую какую-то функцию — моя IDE сама вставляет import. Если бы я работал с Deno, то этого было бы достаточно. Но работая с node, моя IDE должна ещё проверить установлен ли нужный пакет, и если нет — установить.
Я думаю, что большинство подобных вопросов — это дело привычки и отсутствия инструментов.
Deno ж и с .js спокойно работает, разве нет?:D
Я имел в виде существование линтера в целом. то о чем вы писали
Есть, язык, который может работать как угодно. И есть инструмент, который можно настроить так, чтобы он ограничивал разработчика и принуждал его писать только эдак.
А вот настроить эти ограничения каждый может так как нужно именно ему. Что гораздо гибче.
А я вот понимаю такой подход. Сделать гибкий язык который может работать как угодно и предоставить инструмент, чтобы каждая команда могла "донастроить" его для своих нужд. Мне больше нравится когда всё строго, когда имена файлов и структура директорий жестко регламентирована интерпретатором. Но, как ты не крути, это нужно не всегда и часто в разном виде.
Весь JavaScript так работает :)
Так, как бы, и встроенными инструкциями такое возможно
https://deno.land/manual/linking_to_external_code/integrity_checking
Создаст список всех зависимостей:
Скачает все зависимости и проверит каждую по хэшу
Но проблема с динамическими импортами действительно есть.
Deno, как и Node, умеет создавать
lock.json
. В нем будет список ссылок и хэш. Если при восстановлении зависимостей, хэш измененного файла не будет соответствовать сохраненному — Deno выдаст ошибку "Subresource integrity check failed"https://deno.land/manual/linking_to_external_code/integrity_checking