Dziś będzie krótka piłka. Bardzo często spotykam się z wymiennym stosowaniem słów konwersja oraz koercja. Czy aby na pewno są one równoważne? A może jednak się różnią? Po kolei…
Konwersja
Najogólniej opisując konwersja typów to przekształcenie pewnej wartości w wartość należącą do innego typu danych.
Konwersja może być jawna (explicit) lub niejawna (implicit).
Konwersja jawna (explicit conversion)
Inaczej: rzutowanie (casting).
Ma miejsce w przypadku, kiedy programista w kodzie nakazuje kompilatorowi potraktowanie zmiennej jednego typu danych, jak gdyby należała ona do innego typu.
const value1 = '3';
const value2 = 8;
const sum = Number(value1) + value2;
console.log(sum); //11
W powyższym przykładzie kompilator potraktował string
'3'
jako liczbę (zgodnie z funkcją Number()
). Ostateczna suma wartości 3 + 8 to spodziewana liczba 11.
Konwersja niejawna (implicit conversion)
Inaczej: (chwila pauzy… bębenki…) koercja (coercion)! Tadaaam!
Ma miejsce w przypadku, kiedy kompilator automatycznie określa typ danych, bez ingerencji programisty.
const value1 = '3';
const value2 = 8;
const sum = value1 + value2;
console.log(sum); //'38'
W powyższym przykładzie kompilator trafił na operator +
. W związku z tym, iż jednym z argumentów operacji jest string
, JavaScript automatycznie dokonuje koercji argumentu typu number
do typu string
.
Mam nadzieję, że teraz rozumiesz różnicę między słowami konwersja oraz koercja. A jeśli zdarzy Ci się zapomnieć, do którego typu konwersji należy koercja – pamiętaj, że po angielsku coercion oznacza dosłownie przymus. To rozwieje wszelkie wątpliwości.
A na koniec robię konkurs. Otóż w języku polskim posiadamy czasownik konwertować utworzony od rzeczownika konwersja. A jak mógłby wyglądać czasownik utworzony od słowa koercja..? Brakuje mi tego wyrażenia. Koertować? To brzmi źle. Czekam na Twoją propozycję