Cvičení – přidání s implicitní převodem dat
Často budete chtít provádět matematické operace s číselnými daty. V této lekci začnete s přidáním a rozbalíte další operace v další lekci, protože existuje důležitá lekce, která vám umožní zjistit, jak kompilátor jazyka C# parsuje a interpretuje váš kód.
Přidání dvou číselných hodnot
Pokud chcete sečíst dvě čísla, použijete operátor sčítání, což je symbol +
plus . Ano, stejný symbol plus +
, který jste používali ke spojování řetězců, se používá i ke sčítání. Použití jednoho symbolu k více účelům se někdy označuje jako „přetížení operátoru“. V jazyce C# se s ním často setkáte.
V tomto případě kompilátor jazyka C# pozná, co chcete udělat. Kompilátor parsuje váš kód a vidí, že na každé straně +
(operátoru) je jedna číselná hodnota (operandy). Vzhledem k datovým typům proměnných (obě jsou typu int
) si vyhodnotí, že jste chtěli přidat tyto dvě hodnoty.
Do editoru .NET zadejte následující kód:
int firstNumber = 12; int secondNumber = 7; Console.WriteLine(firstNumber + secondNumber);
Spusťte kód a v konzole výstupu uvidíte následující výsledek:
19
Smíchání datových typů kvůli vynucení implicitního převodu typů
Co se stane, když se pokusíte použít +
symbol s oběma string
hodnotami?int
Upravte kód, který jste napsali, tak, aby odpovídal následujícímu kódu:
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + widgetsSold + " widgets.");
Spusťte kód a v konzole výstupu uvidíte následující výsledek:
Bob sold 7 widgets.
V tomto případě kompilátor jazyka C# rozumí tomu, že chcete použít +
symbol ke zřetězení dvou operandů. Usoudí tak z toho důvodu, že symbol +
se nachází mezi operandy, které mají datové typy string
a int
. Proto se pokusí proměnnou widgetsSold
typu int
implicitně (a dočasně) převést na typ string
, aby ji mohl spojit se zbytkem řetězce. Kompilátor jazyka C# se vám snaží pomáhat, jak jen může, ale raději byste ho měli o svých záměrech explicitně informovat.
Pokus o složitější případ sčítání čísel a spojování řetězců
Upravte kód, který jste napsali, tak, aby odpovídal následujícímu kódu:
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + widgetsSold + 7 + " widgets.");
Spusťte kód a v konzole výstupu uvidíte následující výsledek:
Bob sold 77 widgets.
Kompilátor nesečte proměnnou widgetsSold
typu int
s literálem 7
typu int
, ale považuje všechno za řetězce, které spojí je dohromady.
Přidání závorek pro objasnění záměru kompilátoru
Upravte kód, který jste napsali, tak, aby odpovídal následujícímu kódu:
string firstName = "Bob"; int widgetsSold = 7; Console.WriteLine(firstName + " sold " + (widgetsSold + 7) + " widgets.");
Spusťte kód a v konzole výstupu uvidíte následující výsledek:
Bob sold 14 widgets.
Ze symbolu závorek ()
se stane další přetížený operátor. Levá a pravá závorka tvoří v tomto případě operátor pořadí operací – podobně jako v matematickém vzorci. Označujete, že chcete, aby se většina závorek vyřešila jako první, výsledkem je sčítání int
hodnot widgetsSold
a hodnota 7
. Výsledek sčítání se pak implicitně převede na řetězec, aby se mohl spojit se zbývajícími částmi zprávy.
Poznámka:
Provádění výpočtů a zřetězení v jediném řádku kódu byste se měli spíše vyhnout. Naším cílem je pomoci vám pochopit způsob, jak rozumí operátorům a operandům kompilátor.
Rekapitulace
Tady je, co jste se zatím naučili o matematických operacích v jazyce C#:
- S čísly můžete provádět matematické operaci, jako je sčítání.
- Znaménko plus
+
se používá jak ke spojování, tak ke sčítání řetězců. Tomuto stavu se říká přetížení operátoru. Kompilátor odvodí správný způsob použití operátoru podle použitých datových typů operandů. - Pokud je zřejmé, že se vývojář snaží spojit řetězcovou reprezentaci čísla s jiným řetězcem pro účely prezentace, tak kompilátor jazyka C# implicitně převede typ
int
na typstring
(když je to možné). - Pomocí závorek definujte pořadí operací, abyste explicitně řekli kompilátoru, že chcete provést určité operace před jinými operacemi.