GNU/Linux >> Znalost Linux >  >> Linux

Jak na to:Úvod do programování – Proměnné, typy a manipulace s daty

Seriál Jak na to

Toto je 3. část z 5dílné série Úvod do programování

  1. Úvod do programování:Začínáme
  2. Úvod do programování:Váš první program
  3. Úvod do programování:Proměnné, typy a manipulace s daty
  4. Úvod do programování:Řízení toku
  5. Úvod do programování:objektově orientované programování

Návrat k našemu programu

V předchozích dvou článcích této série jste v průměru napsali jeden řádek kódu na článek. V tomto přidáváme další řádek, ale také upravíme řádky, které již máme, protože nyní začneme mluvit o proměnných a datových typech.

Cílem tohoto článku je naučit vás o proměnných a typech ao tom, jak s nimi manipulovat, abyste vytvořili program, který umí víc než jen tisknout „Hello World!“

Musíme toho hodně probrat, tak si připravte prsty a jdeme na to.
.

Použití proměnných

Náš současný program zůstává výjimečně jednoduchý s pouhými dvěma řádky kódu:

Console.WriteLine("Hello World!");
Console.ReadLine();

První řádek odešle kus textu do konzole a druhý přečte řádek od uživatele. Ale kde končí tato linie, do které jsme vstoupili? V současné době prostě odpadá do prázdna, protože neděláme nic pro to, abychom ho získali, takže to okamžitě změňme.

Změňte druhý řádek tak, aby vypadal takto:

String input = Console.ReadLine();

Zde říkáme, že „String input“ (ať už to může být cokoliv) by měl být přiřazen čemukoli, co vychází z metody ReadLine zavoláno na Console statická třída.

Rovnítko používáme k přiřazení hodnot v C# a mnoha podobných jazycích. Tomu, co je na levé straně rovnítka, je přiřazena hodnota toho, co je na pravé straně.

Dvě slova v String input mít různé významy. String označuje typ hodnoty a input je název, který používáme k vyjádření hodnoty. To, co zde děláme, je vytvoření proměnné nazvaný „vstup“, který má typ „String“. Typy vysvětlím později v tomto článku.

Při programování používáme proměnné k uchovávání dat v paměti, abychom s nimi mohli snadno manipulovat. Používáte to také ve svém každodenním životě, aniž byste to skutečně nazývali proměnnou. Vzpomeňte si například na „Váš telefon“, což je jednoduše snadný způsob, jak si zapamatovat název konkrétního elektronického zařízení, který se může v průběhu času měnit. Nebo zvažte „směnný kurz amerického dolaru k euru“. Tuto sazbu si nepamatujete neustále a rychle se mění, takže pravděpodobně zjistíte, že je snazší na ni odkazovat podle názvu, nikoli podle hodnoty.

Proměnné nám umožňují odkazovat na konkrétní část dat jménem namísto hodnoty, bez ohledu na to, jaká hodnota je nebo zda se mění. V našem programu jsou data to, co uživatel zadá před stisknutím Enter klíč. Název, který dáváme konkrétní části dat, je v tomto případě „vstup“, ale můžeme to nazývat různě. Ve skutečnosti existuje celá řada vzorů pouze pro pojmenování proměnných a pravděpodobně z toho budete později ve své kariéře velmi zmatení.
.

Ladění pomocí bodů přerušení

Nyní si to můžete vyzkoušet, ale než to uděláte, chci vám ukázat trik Visual Studia zvaný bod přerušení . Bod přerušení vám umožňuje zastavit provádění programu a zjistit, který řádek kódu se provádí – dokonce vám umožní procházet kód řádek po řádku od tohoto bodu.

Chcete-li vytvořit bod přerušení, buď přesuňte kurzor na první řádek kódu a stiskněte F9 nebo klikněte na okraj vlevo od čísel řádků na řádku, kde chcete nastavit bod přerušení. Pokud to uděláte správně, celá čára by měla zčervenat a na okraji byste měli dostat červený kroužek.

Obrázek 1:Přidán bod přerušení

Všimněte si, že bod přerušení zastaví provádění před čáru, na kterou jste jej nastavili. Body přerušení také fungují pouze při spuštění aplikace prostřednictvím vývojového nástroje, jako je Visual Studio, takže pokud před distribucí aplikace své body přerušení neodstraníte, je to naprosto v pořádku.

Nyní stiskněte F5 nebo tlačítko Start v nabídce a sledujte, jak se vaše aplikace spouští. Hned poté, co to udělá, by se mělo znovu zobrazit Visual Studio a ukázat vám další řádek, který se má provést, žlutě.

Obrázek 2:Zásah do bodu zlomu

V tomto okamžiku můžete ovládat provádění krok za krokem a sledovat výsledky v okně konzoly. Chcete-li jít o krok vpřed, stiskněte F10 ve Visual Studiu. Přesuňte okno konzoly dopředu a všimněte si, že váš kód nyní postoupil o řádek vpřed a nyní je zde „Hello World!“ zobrazí se v okně podle očekávání.

Obrázek 3:Další příkazový řádek spuštěn

Poznámka:Programátoři často označují tento proces připojování k vašemu kódu při jeho provádění jako „ladění“. Tento proces je jedním z příkladů ladění, které můžete provést, abyste ověřili, že váš kód funguje podle očekávání.

.
Projděte svůj kód ještě jednou v sadě Visual Studio. Všimněte si, že se automaticky zobrazí okno konzoly. K této události dochází, protože konzola potřebuje vstup od uživatele při provádění Console.ReadLine() metoda.

Zadejte libovolný kousek textu a stiskněte Enter . Když to uděláte, Visual Studio se znovu zobrazí, protože nyní, když jste zadali vstup, může provádění pokračovat a my stále jen procházíme kódem.

V tomto okně Visual Studio bych rád upozornil na spodní část obrazovky, kde byste měli vidět kartu s názvem „Místní“. Pokud jej nemůžete najít, můžete jej otevřít tak, že přejdete do nabídky a vyberete Debug->Windows->Locals nebo stisknete CTRL+D a poté L .

Jakmile otevřete okno Locals, měli byste vidět, že tam je proměnná nazvaná „input“, která má hodnotu nastavenou na cokoliv, co jste zadali v okně konzoly. V mém případě jsem zadal „Ahoj!“.

Obrázek 4:Debug Locals

Karta Locals zobrazuje proměnné, které máte k dispozici pro použití v aktuálním rozsahu. Než však začneme s těmito daty manipulovat a používat je, je důležité porozumět konceptu typů proměnných.
.

Typy proměnných:statické a dynamické

Víte, existují dva přístupy k tomu, co programátoři nazývají „psaní“, a ani jeden nemá nic společného s mačkáním kláves na klávesnici. Oba přístupy mají silné a slabé stránky. A ne, nebudu vám říkat, co je nejlepší; budete mít spoustu času, abyste to sami určili, a možná pochopíte, proč někteří programátoři vyvíjejí téměř fanatické preference jednoho před druhým.

Tyto dva přístupy jsou statické a dynamické psaní na stroji. C#, jazyk, který používáte v těchto článcích, je staticky typovaný jazyk, zatímco jiné populární jazyky jako JavaScript jsou dynamicky typované jazyky. Dovolte mi vysvětlit rozdíl.

Všimli jste si dříve, že když jsme vytvořili proměnnou „input“, rozhodli jsme se, že jde o String variabilní. String je termín, který slouží k označení toho, jaký typ dat může do proměnné vstoupit. Do proměnné nemůžete přidat nekompatibilní data, protože Visual Studio – nebo technicky kompilátor, který překládá váš programovací kód do strojového kódu – bude mít námitky a odmítne spolupracovat.

String je jen kus textu a pojme téměř cokoli, což dává smysl, když žádáme uživatele, aby zadal jakýkoli kus textu. Existuje však potenciální problém, když chceme začít pracovat s našimi daty.

Řekněme, že chceme uživatele požádat, aby zadal svůj věk, a že chceme omezit určité funkce, pokud je uživateli například méně než 13 let.

Jak zjistíte, zda "Ahoj!" je menší než 13? Nemůžete, protože neexistuje způsob, jak provádět aritmetiku na kusu textu. „Tomato“ plus 45 nedává smysl.

Situace, jako je tato, je důvodem, proč staticky typované jazyky mají různé typy proměnných. Můžeme vědět, zda můžeme s daty provádět aritmetické nebo jiné operace ještě předtím, než program odešleme uživateli.

Ve staticky typovaných jazycích, jako je C#, VisualBasic a Java, musíte předem definovat, co může proměnná obsahovat, a nemůžete vytvořit nebo zkompilovat svůj program bez dodržení těchto pravidel. Na oplátku máte zaručeno, že nebudete srovnávat jablka s verzí 3.42 ani se nebudete snažit zjistit, zda je legální prodávat alkohol osobě, které „není vaše podnikání“ let.

V dynamicky zadávaných jazycích žádné takové záruky nezískáte. Místo toho pouze pracujete s proměnnými, které mohou obsahovat jakýkoli typ dat. Příkladem dynamicky typovaných jazyků je JavaScript. V JavaScriptu musí programátoři zkontrolovat, zda získaná data mají očekávanou hodnotu, protože jejich kód může selhat, pokud se pokusí přidat nebo porovnat „ano“ s 18.

Poznámka:Ve většině jazyků můžete ve skutečnosti přidat „ano“ k 18 v závislosti na tom, jak to uděláte. S největší pravděpodobností však skončíte s „ano18“, což pravděpodobně není to, co očekáváte.

.
U staticky psaných jazyků také zjistíte, že všechny metody vracejí určitý typ dat – nebo v některých případech vůbec nic. Například Console.ReadLine() metoda vrací hodnotu řetězce, takže skvěle funguje nastavení našeho String input proměnnou na výstup z této metody stejně jako my.

Co se však stane, pokud chceme uživatele požádat, aby vybral číslo mezi 1 a 10, protože toto číslo chceme později použít? Začněme stavět jednoduchou hru a podívejme se, ano?
.

Hádací program

Hra, kterou vytvoříme, je hádání. Vybereme tajné číslo mezi 1 a 10 a poté požádáme uživatele, aby uhádl, které číslo to je. Později tuto hru uděláme pokročilejší, takže zatím uživatel dostane jen jeden odhad a má tedy 10% šanci, že to udělá správně. Ve skutečnosti ani nebudeme v tomto článku testovat, zda jsou správné, protože by to vyžadovalo podmínky a řízení toku, což jsou pojmy, které se zatím nenaučíme.

Za prvé, typ proměnné pro číslo, které nemá desetinná místa, se nazývá celé číslo nebo int ve zkratce. int může pojmout velmi velká čísla, obvykle omezená typem architektury CPU, přičemž 32bitový CPU pojme celá čísla až kolem 4,4 miliardy. Kromě toho můžeme použít další typy proměnných. Pro naše jednoduché příklady však běžný int bude fungovat dobře.

Pro všechny typy proměnných můžeme přímo přiřadit jednoduché hodnoty. Například:

int value = 10; 
string name = “Frank”;

Můžeme také provádět operace s proměnnými, pokud „dávají smysl“. Můžete například sečíst dvě celočíselné hodnoty.

int value1 = 10;
int value2 = 3;
int value3 = value1+value2;

Celé číslo uložené v proměnné „value3“ je 13 poté, co část kódu obsahující tyto řádky projde tímto bodem.

Můžeme také přiřadit hodnoty z návratové hodnoty metod. Zkusme jen přiřadit výsledek z Console.ReadLine() metodu do int , můžeme? Pokud jste tak ještě neučinili, zastavte provádění svého programu. Nyní se chystáme aktualizovat naše dva řádky kódu jako takové:

Console.WriteLine("Guess a number between 1 and 10:");
int input = Console.ReadLine();

Když tak učiníte, zobrazí se případ červených vlnovek (jak je znázorněno níže na obrázku 5) a chybová zpráva v seznamu chyb uvádějící „Nelze implicitně převést typ ‚string‘ na ‚int‘“.

Obrázek 5:Případ Red Squigglies

Tuto chybu dostáváme, protože hodnota pochází z Console.ReadLine() je řetězec a kompilátor nemůže zaručit, že dokáže převést to, co uživatel zadá, na číslo. Uživatel může zadat „NE!“ například a neexistuje způsob, jak tento vstup změnit na číslo.

Samozřejmě existují způsoby, jak tento problém obejít. Můžeme přinutit kompilátor, aby přijal cokoli, co přichází, jako specifického typu. Ve skutečnosti to můžeme udělat s jakýmkoliv typem. Jde o proces zvaný casting .

Když přetypujeme typy proměnných, kompilátor udělá vše pro to, aby převedl z jednoho typu proměnné na jiný. Toto přetypování může například fungovat, pokud máte desetinné číslo a chcete celé číslo.

decimal decimalvalue = 3.14M;
int integervalue = decimalvalue;

První řádek přiřadí hodnotu 3,14 decimal proměnná s názvem decimalvalue . Druhý řádek se pokusí přiřadit tuto desetinnou hodnotu celému číslu.

Poznámka:M je tam jednoduše jako nápověda pro kompilátor, že vytváříme desítkovou hodnotu, protože pro ještě větší zmatek v tomto bodě existuje několik typů decimal hodnoty včetně dvojité přesnosti a hodnot s pohyblivou řádovou čárkou. I když je užitečné vědět, žádný z těchto bodů není věcí, které byste si v tomto článku měli dělat starosti.

.
Pokud zadáte tyto řádky ve Visual Studiu, všimnete si, že i nyní se nám zobrazuje případ klikyháků, protože decimal hodnota se nevejde do int hodnota. Pokud bychom to zkusili, ztratili bychom 0,14 a zůstala by nám jen 3 jako hodnota integervalue .

Toto chování může být přesně to, co chceme. V tomto případě můžeme přetypovat decimal hodnotu na int , což efektivně nutí kompilátor přijmout explicitní převod desítkové hodnoty na celočíselnou hodnotu. Uděláme to tak, že před hodnotu uvedeme požadovaný typ v závorce. Porovnejte tyto řádky kódu s řádky výše.

decimal decimalvalue = 3.14M;
int integervalue = (int)decimalvalue;

Nyní naše squigglies Visual Studio zmizí a kompilátor je spokojený. Ztrácíme některé podrobnosti v číslech, ale můžete si být jisti, že to je to, co chcete.

V C# bude kompilátor vyžadovat, abyste přetypovali hodnoty, pokud existuje možnost ztráty dat, jako je tomu v případě, že přejdete z desítkové na celočíselnou hodnotu. Kompatibilní převod však ochotně přijme, když není šance na ztrátu dat. Pokud jste se pokusili přiřadit int hodnotu na decimal typu, kompilátor se nepohádá.

Zatím se však k řešení našeho problému opravdu neblížíme. Můžeme zkusit přetypovat hodnotu řetězce pocházející z Console.ReadLine() do int , ale kompilátor si bude stěžovat, že nemůže automaticky převést hodnotu řetězce na celé číslo (jak je znázorněno níže na obrázku 6), protože neexistuje způsob, jak předem zaručit, že je možné převést to, co pochází od uživatele, na číslo.

Obrázek 6:Chyba s Casting String to Int

Nebojte se, protože existuje lepší způsob, jak to vyřešit! Řešením je použití statické metody k analýze hodnoty řetězce na celé číslo a nachází se přímo v int typ sám. Jako takový můžeme zavolat int.Parse odešlete, co přijde z Console.ReadLine() a získat zpět celé číslo.

Takže aktualizujme váš programový kód tak, aby nejprve vyzval uživatele k zadání dat a poté načtěte data do string proměnnou nazvanou „text“ a nakonec analyzovat „text“ na celé číslo.

Console.WriteLine("Guess a number between 1 and 10:");
string text = Console.ReadLine();
int input = int.Parse(text);

Jakmile to uděláte, všechny vaše klikyháky by měly zmizet a váš program by se měl spustit podle očekávání. Neváhejte nastavit bod přerušení za poslední řádek, abyste zastavili provádění a zkontrolovali své proměnné. Podívejte se, co se stane, když během provádění zadáte číslo.

Obrázek 7:Platné provedení

Uvidíte, že „vstup“ nyní ukazuje, že má hodnotu 3, zatímco „text“ má v mém případě hodnotu „3“ (všimněte si dvojitých uvozovek; dvojité uvozovky znamenají hodnotu řetězce).

Co se ale stane, když zadáme něco jiného než číslo? Pokud místo čísla zadáte něco jako „Ahoj“, program se zhroutí. V aplikaci Visual Studio se provádění zastaví a informuje vás o výjimce, jak je znázorněno níže na obrázku 8.

Obrázek 8:Neplatné provedení

Jako programátoři nechceme, aby se náš software zhroutil, takže musíme tuto chybu vyřešit. To si však necháme na příští článek, protože zahrnuje manipulaci s tokem programu a už jsme toho probrali docela dost, abychom se dostali k tomuto bodu.
.

Proměnné, typy a manipulace se zabalováním dat

Pro tuto chvíli je čas uzavřít tento třetí článek, a přestože jsme napsali pouze jeden další řádek kódu, pokryli jsme spoustu nového materiálu. Nebojte se, když jsem se to před mnoha lety začal učit, také pro mě bylo mnoho matoucích aspektů.

V tomto článku jsme se zabývali konceptem proměnných a podívali jsme se na datové typy a kdy a proč jsou datové typy důležité. Naučili jste se, jak vytvářet proměnné a dokonce jak převádět data z jednoho typu na jiný pomocí castingu. Dozvěděli jste se o ladění krok za krokem, bodech přerušení a o tom, jak kontrolovat dostupné proměnné v sadě Visual Studio.

Měli byste také poznamenat, že věci, které jste se nyní naučili, jsou velmi běžné napříč jazyky a platformami a já jsem se postaral o to, abych představil a vysvětlil pojmy, které se liší, jako je statické versus dynamické psaní.

V příštím článku se podíváme na řízení toku, abyste se mohli naučit, jak řídit provádění vašeho programu a kontrolovat různé podmínky, abyste určili, co by měl program dělat dále.

Seriál Jak na to

Toto je 3. část z 5dílné série Úvod do programování

  1. Úvod do programování:Začínáme
  2. Úvod do programování:Váš první program
  3. Úvod do programování:Proměnné, typy a manipulace s daty
  4. Úvod do programování:Řízení toku
  5. Úvod do programování:objektově orientované programování

Linux
  1. C Výukový program programování 4 - Proměnné a paměť

  2. Redis jako mezipaměť:Jak to funguje a proč ji používat

  3. Jak nastavit, vypsat a odebrat proměnné prostředí v Linuxu

  1. Proměnné prostředí Linux:Jak číst a nastavovat na Linux VPS

  2. Jak nastavit/vytvořit proměnné prostředí a prostředí v Linuxu

  3. Jak spustit a zastavit OSWatcher

  1. Proč jsou data důležitá a jak je chránit

  2. Jak zálohovat a obnovit data a konfigurace RabbitMQ

  3. Manipulace s úchopy kláves a ukazatelů X na příkazovém řádku?