Pytanie brzmi: jakie są przypadki użycia operatora konwersji typu domyślnego, który nie sprawi, że mój kod będzie trudniejszy do zrozumienia?
Gdy typy nie są niepowiązane (z programistami). Istnieją (rzadkie) scenariusze, w których masz dwa niepowiązane typy (w odniesieniu do kodu), które są faktycznie powiązane (w odniesieniu do domeny lub rozsądnych programistów).
Na przykład jakiś kod do dopasowania ciągów. Typowym scenariuszem jest dopasowanie dosłownego ciągu znaków. Zamiast wywoływania IsMatch(input, new Literal("some string"))
, niejawna konwersja pozwala pozbyć się tej ceremonii - szumu w kodzie - i skupić się na dosłowności łańcucha.
Większość programistów zobaczy IsMatch(input, "some string")
i szybko zrozumie, co się dzieje. Sprawia, że Twój kod jest wyraźniejszy w witrynie połączeń. Krótko mówiąc, nieco łatwiej jest zrozumieć, co się dzieje, przy niewielkim koszcie tego, co się dzieje.
Teraz możesz argumentować, że zwykłe przeciążenie funkcji, aby zrobić to samo, byłoby lepsze. I to jest. Ale jeśli tego rodzaju rzeczy są wszechobecne, to posiadanie jednej konwersji jest czystsze (mniej kodu, zwiększona spójność) niż wykonywanie stosu przeciążeń funkcji.
I możesz argumentować, że lepiej jest wymagać od programistów jawnego utworzenia typu pośredniego, aby zobaczyli „to, co się naprawdę dzieje”. To jest mniej proste. Osobiście uważam, że dosłowny przykład dopasowania łańcucha jest bardzo jasny na temat „tego, co naprawdę się dzieje” - programista nie musi znać mechaniki tego, jak wszystko się dzieje. Czy wiesz, jak cały Twój kod jest wykonywany przez różne procesory, na których działa Twój kod? Zawsze istnieje linia abstrakcji, w której programiści przestają dbać o to, jak coś działa. Jeśli uważasz, że niejawne kroki konwersji są ważne, nie używaj niejawnej konwersji. Jeśli uważasz, że to tylko ceremonia, aby komputer był szczęśliwy, a programiście lepiej byłoby nie widzieć tego hałasu wszędzie,