|
Труд вопреки насмешкам
|
|
Правда ли, что неявное преобразование типов - это зло, но и универсальный оператор явного преобразования - тоже зло?16.02.2022, 23:21. Показов 2427. Ответов 20
Метки нет (Все метки)
Если кратко, то я думаю, что да. Вот пример: программист преобразует double в int. Транслятору предоставляется свобода выбора из четырех функций: Round, Floor, Ceiling и Truncate. А это - неопределенное поведение. Надеюсь, вы понимаете ужасный смысл этих слов? Насколько я знаю, обычно используется Truncate, но это не всегда именно то, что хотел пользователь. А если число не умещается в int, вариантов еще больше: вернуть младшие биты, округлив их любым из вышеперечисленных способов, вернуть экстремальное для int значение, вернуть 0 и т. д. Поэтому я считаю, что в таком случае компилятор должен выдавать как минимум предупреждение, а лучше ошибку, и требовать явно указать способ приведения.
Другой пример: преобразование массива байт в строку. Может быть, программист хотел вернуть эти байты списком, может быть, попытаться извлечь из них текст в какой-либо кодировке, а может, закодировать в Base64... Еще хуже преобразование object в какой-либо другой тип. Число возможных вариантов поведения транслятора невозможно себе представить. Считаю, что такое преобразование должно производиться исключительно оператором is.Еще вариант - преобразование внешнего типа коллекции в более узкий или несвязанный (например, список в множество или стек в очередь). И хотя неопределенного поведения тут нет, но это действие может привести к огромным вычислительным расходам впустую. Оптимальный, с моей точки зрения, вариант - использовать функции в стиле LINQ или конструкторы. Microsoft в этом случае поступили неглупо. А вот расширяющие преобразования коллекций (например, очередь в список), я считаю, должны быть вообще неявными, так как они естественны и не приводят к потере данных. Другие мнения приветствуются.
0
|
|
| 16.02.2022, 23:21 | |
|
Ответы с готовыми решениями:
20
Почему xpage это зло Неявное преобразование типов? |
|
|
|
| 17.02.2022, 01:58 | |
|
Ягоды вишни перебрать, удалить веточки и плодоножки, промыть и дать стечь в дуршлаге или сите.
Пока ягодки будут стекать, простерилизовать банки, а крышки для закатки прокипятить. Насыпать в бутыль вишню. В банку засыпать сахар и лимонную кислоту. Залить ягоды кипящей водой, накрыть крышкой и закатать. Тщательно взболтать воду в банке. Убрать в банку темное теплое место для медленного охлаждения.Особенность компота из вишни в том, что сразу после закатки он практически бесцветный. Это не должно настораживать. Пройдет 2-3 дня, компот настоится и приобретет красивый темный цвет. Прошло 2-3 дня и компот готов. Приятного аппетита!
2
|
|
|
698 / 572 / 75
Регистрация: 20.09.2014
Сообщений: 3,699
|
|
| 17.02.2022, 06:05 | |
|
Да, это хорошо, когда специалист умеет думать абстрактно, то есть решать не одну конкретную задачу, а сразу много задач, которые могли бы возникнуть. Но часто абстрактные рассуждения никому не нужны, ведь нужно решать конкретную задачу, в которой универсальное решение не требуется. Рецепты - это наше все!
0
|
|
|
Труд вопреки насмешкам
|
|
| 17.02.2022, 09:25 [ТС] | |
|
Никто не хочет ничего написать по делу?
0
|
|
|
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,929
|
|||
| 18.02.2022, 01:58 | |||
|
0
|
|||
|
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,929
|
|
| 18.02.2022, 09:27 | |
|
0
|
|
|
282 / 485 / 12
Регистрация: 21.06.2019
Сообщений: 3,018
|
|
| 18.02.2022, 09:56 | |
|
0
|
|
|
Заблокирован
|
||
| 18.02.2022, 10:06 | ||
|
Во первых, если по твоему мнению неопределённое поведение даёт само преобразование, то какая разница явное оно или нет? Никакой, это свойство самого преобразования. Во вторых, чем отличается "универсальный оператор преобразования" от того же floor либо чего-то подобного? Также ничем, кроме того, что позволяет писать полиморфный код. Очевидно, что нечто более гибкое даёт больший простор для действий, в том числе тех, смысла которых ты не понимаешь.
0
|
||
|
фрилансер
6442 / 5636 / 1127
Регистрация: 11.10.2019
Сообщений: 14,983
|
|
| 18.02.2022, 11:48 | |
|
0
|
|
|
Труд вопреки насмешкам
|
|||
| 18.02.2022, 12:28 [ТС] | |||
|
0
|
|||
|
Неэпический
|
||
| 18.02.2022, 12:37 | ||
![]() Добавлено через 3 минуты Просто для справки: undefined behaiour (неопределённое поведение) unspecified behavior (неуточнённое поведение)
0
|
||
|
Труд вопреки насмешкам
|
||
| 18.02.2022, 13:07 [ТС] | ||
|
0
|
||
|
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,929
|
||
| 19.02.2022, 04:21 | ||
|
0
|
||
|
Модератор
3132 / 2279 / 469
Регистрация: 26.03.2015
Сообщений: 8,870
|
|
| 19.02.2022, 22:54 | |
|
Неявное преобразование типов - это зло.
Явное преобразование типов - это нормально, когда оно является частью доменной логики. Поведение транслятора строго определено в обоих случаях. То есть, нет никакого "неопределённого поведения". Неявное преобразование - зло не само по себе, а потому что оно может маскировать ошибки программиста. Если бы программисты никогда не ошибались, то не было бы никаких проблем с неявным преобразованием типов.
0
|
|
|
Просто Лис
|
||||||||||||||||
| 25.02.2022, 20:18 | ||||||||||||||||
|
Возьмите раст и перестаньте беспокоиться о неявных преобразованиях.
Имхо хуже всего в неявных преобразованиях, когда простейший код компилируется ("компилируется - значит, работает", ага), а при запуске бросает исключение.
0
|
||||||||||||||||
| 25.02.2022, 20:18 | |
|
Помогаю со студенческими работами здесь
20
Неявное преобразование типов в C# Неявное преобразование типов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|