Питання полягає в тому, які випадки використання оператора неявного типу перетворення, який не зробить мій код набагато складнішим для розуміння?
Коли типи не пов'язані (з програмістами). Є (рідкісні) сценарії, коли у вас є два неспоріднених типу (що стосується коду), які насправді пов'язані (що стосується домену чи розумних програмістів).
Наприклад, якийсь код, щоб зробити відповідність рядків. Загальний сценарій - відповідати рядковому буквалу. Замість того, щоб викликати IsMatch(input, new Literal("some string"))
, неявна конверсія дозволяє позбутися цієї церемонії - шуму в коді - і зосередитись на рядковому букве.
Більшість будь-яких програмістів побачать IsMatch(input, "some string")
і швидко зрозуміють, що відбувається. Це робить ваш код чіткішим на сайті виклику. Коротше кажучи, це робить його трохи легше зрозуміти , що відбувається, в невеликій рахунок , як що відбувається.
Тепер ви можете стверджувати, що просте перевантаження функцій, щоб зробити те саме, було б краще. І воно є. Але якщо така річ є всюдисущою, тоді одна конверсія є більш чистою (менше коду, підвищеної консистенції), ніж робити купу функцій перевантажує.
І ви можете заперечити, що краще вимагати від програмістів явно створити проміжний тип, щоб вони побачили, "що насправді відбувається". Це менш прямолінійно. Особисто я вважаю, що приклад відповідності буквального рядка дуже чіткий щодо того, "що насправді відбувається" - програмісту не потрібно знати механіку того, як все відбувається. Чи знаєте ви, як весь ваш код виконується різними процесорами, на яких працює ваш код? Завжди є лінія абстракції, де програмісти перестають дбати про те, як щось працює. Якщо ви вважаєте, що неявні кроки перетворення важливі, тоді не використовуйте неявну конверсію. Якщо ви думаєте, що це просто церемонія, щоб радіти комп'ютеру, і програмісту було б краще не бачити цього шуму скрізь,