[C#] Parse

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Alesh2020 7. 10. 2021 19:21

Zdravím, snažím se osvojit si C#, a nechápu: proč první proměnná je "int cisloA = Int32.Parse(retezecCisloA);" "retezecCisloA", zatímco ta druhá je "int cisloB = Int32.Parse(Console.ReadLine());" "Console.ReadLine()" - proč ten rozdíl?


Kód: Vybrat vše

using System;

namespace nacteniXvstupuXodXuzivatele
{
class Program
{
static void Main(string[] args)
{
Console.Write("Zadejte první číslo: ");
// program si vyžádá první číslo
string retezecCisloA = Console.ReadLine();
// program načte, co sem tam naťukal
int cisloA = Int32.Parse(retezecCisloA);
// NÁVRATOVOU HODNOTU METODY READLINE SI NEMUSÍME UKLÍDAT DO
// PROMĚNNÉ, ALE MŮŽEME JI ROVNOU PŘEDAT METODĚ PARSE
Console.Write("Zadejte druhé číslo: ");
int cisloB = Int32.Parse(Console.ReadLine());
int soucin = cisloA * cisloB;
// samotné vynásobení
Console.WriteLine(" {0} * {1} = {2}", cisloA, cisloB, soucin);
Console.ReadKey();
}
}
}


Ách jo, kam si má teda člověk psát poznámky... :hm
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 7. 10. 2021 20:24

Vždyť to tam máš přímo napsané v komentáři.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod krysta 8. 10. 2021 07:38

Přesně tak. Takovou hrůzu vám cpou ve škole jako příklad?
krysta
Junior

Odeslat příspěvekod D1rty 8. 10. 2021 10:29

Console.ReadLine() - vrati text, ktory si zadal cez konzolu ako String/text.

string retezecCisloA = Console.ReadLine();
- nacita text z konzoly a ulozi to do string premennej retezecCisloA.

int cisloA = Int32.Parse(retezecCisloA);
-Metoda Int32.Parse() vezme stringovu hodnotu z premennej retezecCisloA a vrati to ako int cislo a ulozi sa to do cisloA .


int cisloB = Int32.Parse(Console.ReadLine());
- toto je to iste akurat skratene (nepouzije sa medzikrok ulozenia do premennej retezecCisloA)
- Console.ReadLine() vrati to co si zadal do konzoly, hned to zaroven posle do metody Parse() a ta hned vrati zadanu hodnotu ako int a ulozi sa to do premennej cisloB .

Snad sa to z tohto da pochopit.
D1rty
Junior

Odeslat příspěvekod Alesh2020 8. 10. 2021 12:38

Wikan píše:Vždyť to tam máš přímo napsané v komentáři.



Ten komentář sem tam napsal já, pane Bože. Ale zastávám názor, že než mechanicky psát, a nepřemýšlet nad tim, co píšu, tak je lepší se optat. Proč je teda každej ten řetězec jinej, ikdyž plní stejnou funkci?
Ách jo, kam si má teda člověk psát poznámky... :hm
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 8. 10. 2021 13:38

A jak já mám asi tak tušit, že jsi ten komentář napsal sám?
Při programování (a samozřejmě nejen při něm) se ke stejnému výsledku dá prakticky vždycky dojít různými způsoby. Je na tobě, kterým způsobem se vydáš.
Tady máš v jednom případě kratší zápis, ve druhém zase (pro někoho) čitelnější. Ani o jednom se nedá jednoznačně říct, který je lepší.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alesh2020 8. 10. 2021 13:44

No to rozveď, protože to mi nejde na rozum.
Ách jo, kam si má teda člověk psát poznámky... :hm
Alesh2020
Junior
Uživatelský avatar

Odeslat příspěvekod Wikan 8. 10. 2021 13:49

Co na tom chceš rozvádět? Přijde mi, že máš pocit, že na všechno existuje jenom jedno správné řešení. A tak to prostě není.
Zdrojový kód neslouží jenom jako předpis pro počítač, co má dělat. Slouží i lidem, kteří ho budou později číst, upravovat atd. Takže někdy je lepší mít kód trochu "ukecanější" i když ke stejnému výsledku by došel i podstatně kratší kód.
Wikan
Moderátor
Uživatelský avatar

Odeslat příspěvekod Alpha8520 8. 10. 2021 17:35

A to ještě neví, že existuje metoda TryParse, která víceméně dělá to stejné, spíše je vhodnější na použití, protože neháže exception.
Lepší je tedy použít var success = Int32.TryParse(retezecCisloA, out var cislo) a ověřit, zda success je true.
Jinak odpověď na tvou otázku. Ty děláš absolutně to stejné. Využíváš dvou metod, první je Console.Readline, která načítá řetězec z konzole a Int32.Parse, který převádí řetězec na číslo. Rozdíl mezi prvním a druhým případem je pouze v přehlednosti získané tím, že přečtený řetězec nejprve přiřadíš do nějaké proměnné a ten se teprve snažíš poté převést na číslo... a lepší schopnosti debugovat případné chyby. Teď je to sranda na dvou řadcích, ale pokud budeš dělat složitější programy, tak se v tom nevyznáš. Když ti program spadne na řádku Int32.Parse(Console.Readline(retezec)) a visual studio nebo v čem to píšeš ti napíše neurčitou chybu, jak budeš vědět, v které metodě program spadl při debugování? Není prostě dobré ten kód řetězit do jednoho řádku, já osobně tohle řetězení metod nemám rád a nepoužívám.
Alpha8520
Junior

Odeslat příspěvekod Alesh2020 9. 10. 2021 10:01

A kterej z těch případů je "řetězení metod"?
Ách jo, kam si má teda člověk psát poznámky... :hm
Alesh2020
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků