Proměnné a datové typy

Z Maturita 2012
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
m (formátování)
(e implicitni, e explicitni (ale jen malo))
 
(Není zobrazeno 29 mezilehlých verzí od 2 uživatelů.)
Řádka 9: Řádka 9:
  
  
== Základní datové typy - Visual Basic ==
+
== Základní datové typy ==
  
'''Celočíselné:'''
+
'''Konkrétní hodnoty rozsahu čísel si pamatovat nemusíte, je to tu, aby jste měli představu o tom, o jakých číslech mluvíte.'''
*Byte - zabírá 1Byte ( 0 až 255 )
+
*Integer - celočíselná hodnota se znaménkem zabírající 2Byte (-32768 až 32767 )
+
*Long - celočíselná hodnota zabírající 4Byte (-2147483648 až 2147483647 )
+
  
 +
<table style="width:100%" class="wikitable">
 +
<tr>
 +
<th style="width:50%" colspan="2">VB</th>
  
'''Reálné:'''
+
<th style="width:50%" colspan="2">C#</th>
*Decimal - celočíselná hodnota bez znaménka,lze ho použít jen pomocí Variant jehož je podtypem,zabírá 12 Byte
+
</tr>
*Single - celočíselná hodnota zabírající 4 Byte (-3.402823E38 až -1.401298E-45 pro záporné hodnoty,1,401298E-45 až 3,402823E38 pro kladné hodnoty)
+
*Double - je obdobou single,ale ve dvojnásobné přesnosti ,zabírá 8 Byte
+
  
 +
<tr>
 +
<th colspan="4">Celočíselné</th>
 +
</tr>
 +
<tr>
 +
<td><code>Byte</code></td>
  
'''Logické:'''
+
<td>zabírá 1&nbsp;byte (0&ndash;255)</td>
*Boolean - uchovává hodnoty True nebo False zabírající 2Byte
+
  
 +
<td>&nbsp;</td>
  
'''Nestardadní:'''
+
<td>&nbsp;</td>
*Object - obsahují odkaz na objekt (adresu),zabírá 4 Byte
+
</tr>
*Variant - je to obecný datový typ,který může obsahovat jeden z výše uvedených datových typů,proměnná tohoto typu může dynamicky měnit svůj datový typ,jestliže není proměnná nadimenzovaná pak je typu Variant,zabírá 16 Byte
+
*Date - obsahuje hodnoty datum a čas (1.leden 100 až 31.prosinec 9999,00:00:00 až 23:59:59),zabírá 8 Byte
+
  
 +
<tr>
 +
<td><code>Integer</code></td>
  
'''Řetězcové:'''
+
<td>zabírá 2&nbsp;byty, číslo se znaménkem (-32768&nbsp;až 32767)</td>
*String - řetězec libov. znaků kódovaných pomocí ASCII,jeho délka je prakticky neomezena - asi 2 miliardy znaků,dále se dělí na řetězec promněnlivé délky a pevné délky
+
  
 +
<td><code>int</code></td>
  
== Základní datové typy - CSharp ==
+
<td>zabírá 4&nbsp;byty</td>
 +
</tr>
  
*Celočíselné:
+
<tr>
** int - celá čísla - velikost 32 bitů, od -2<sup>31</sup> až 2<sup>31</sup>-1
+
<td><code>Long</code></td>
** long - celá čísla - velikost 64 bitů, od -2<sup>63</sup> až 2<sup>63</sup>-1
+
  
*Reálné:
+
<td>zabírá 4&nbsp;byty, celočíselná hodnota (-2147483648&nbsp;až 2147483647)</td>
** float - desetiná čísla - velikost 32 bitů, rozsah +- 3,4 * 10<sup>38</sup>
+
** double - desetiná čísla - velikost 64 bitů, rozsah +- 1,7 * 10<sup>308</sup>
+
  
*Logické:
+
<td><code>long</code></td>
** bool - logická hodnota - velikost 8 bitů, nabývá hodnot true nebo false
+
 
 +
<td>zabírá 8&nbsp;bytů</td>
 +
</tr>
 +
 
 +
<tr>
 +
<th colspan="4">Reálné</th>
 +
</tr>
 +
 
 +
<tr>
 +
<td><code>Decimal</code></td>
 +
 
 +
<td>zabírá 14&nbsp;bytů, číslo se znaménkem, lze ho použít jen pomocí
 +
Variant, jehož je podtypem</td>
 +
 
 +
<td>&nbsp;</td>
 +
 
 +
<td>&nbsp;</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td><code>Single</code></td>
 +
 
 +
<td>zabírá 4&nbsp;byty, číselná hodnota (-3.402823E38 až&nbsp;&ndash;1.401298E-45&nbsp;pro
 +
záporné hodnoty, 1,401298E-45&nbsp;až 3,402823E38 pro kladné hodnoty)</td>
 +
 
 +
<td><code>float</code></td>
 +
 
 +
<td>zabírá 4&nbsp;byty</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td><code>Double</code></td>
 +
 
 +
<td>zabírá 8&nbsp;bytů, obdoba <code>Single</code> s&nbsp;dvoujnásobnou
 +
přesností</td>
 +
 
 +
<td><code>double</code></td>
 +
 
 +
<td>zabírá 8&nbsp;bytů</td>
 +
</tr>
 +
 
 +
<tr>
 +
<th colspan="4">Logické</th>
 +
</tr>
 +
 
 +
<tr>
 +
<td><code>Boolean</code></td>
 +
 
 +
<td>zabírá 2&nbsp;byty, uchovává hodnotu <code>True</code> (pravda), nebo
 +
<code>False</code>&nbsp;(lež)</td>
 +
 
 +
<td><code>bool</code></td>
 +
 
 +
<td>zabírá 1&nbsp;byte, logická hodnota&nbsp;&ndash; nabývá hodnot <code>true</code>,
 +
nebo&nbsp;<code>false</code></td>
 +
</tr>
 +
 
 +
<tr>
 +
<th colspan="4">Řetězcové</th>
 +
</tr>
 +
 
 +
<tr>
 +
<td><code>String</code></td>
 +
 
 +
<td>řetězec libovolných znaků kódovaných pomocí ASCII, délka prakticky
 +
neomezena (asi 2&nbsp;miliardy znaků); dělí se na řetězec pevné a
 +
dynamické&nbsp;délky</td>
 +
 
 +
<td><code>string</code></td>
 +
 
 +
<td>posloupnost znaků (řetězec), 2&nbsp;byty na jeden znak</td>
 +
</tr>
 +
 
 +
<tr>
 +
<th colspan="4">Nestandardní</th>
 +
</tr>
 +
 
 +
<tr>
 +
<td><code>Object</code></td>
 +
 
 +
<td>zabírá 4&nbsp;byty, obsahuje odkaz na objekt (adresu objektu v&nbsp;paměti)</td>
 +
 
 +
<td><code>object</code></td>
 +
 
 +
<td>podle přiřazené hodnoty přiřazuje i&nbsp;datový typ
 +
<pre>object a;
 +
a = 1;</pre>
 +
proměnná <code>a</code> je typu <code>Int32</code></td>
 +
</tr>
 +
 
 +
<tr>
 +
<td><code>Variant</code></td>
 +
 
 +
<td>zabírá 16&nbsp;bytů, obecný datový typ, který může obsahovat jeden
 +
z&nbsp;výše uvedených datových typů, proměnná tohoto typu může dynamicky
 +
měnit svůj datový&nbsp;typ</td>
 +
 
 +
<td>&nbsp;</td>
 +
 
 +
<td>&nbsp;</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td><code>Date</code></td>
 +
 
 +
<td>zabírá 8&nbsp;bytů, obsahuje hodnotu odpovídající datumu a času (1.leden
 +
100&nbsp;až 31.prosinec 9999,00:00:00 až 23:59:59</td>
 +
 
 +
<td><code>DateTime</code></td>
 +
 
 +
<td>uchovává datum a čas</td>
 +
</tr>
 +
</table>
  
*Nestardadní:
 
** DateTime - datový typ ve kterém je uloženo datum a čas.
 
** object - podle přiřazené hodnoty přiřazuje i datový typ.
 
*** object a;
 
*** a = 1;
 
*** tak proměnná a je typu Int32
 
  
*Řetězcové:
 
** string - posloupnost znaků (řetězec), 16 bitů na jeden znak
 
** char - jeden znak - velikost 16 bitů, rozsah 0 až 2<sup>16</sup>-1
 
  
  
 
== Explicitní a implicitní deklarace proměnných ==
 
== Explicitní a implicitní deklarace proměnných ==
  
'''Explicitní'''
+
=== Explicitní ===
* Pro proměnnou rezervujeme za běhu programu prostor v paměti pro uložení proměnné. Explicitní deklarace proměnné se zapisuje před jejím vlastním použitím, zpravidla na začátku procedury události. Deklarace začíná příkazem Dim (v podstatě znamená dimenze nebo dimenzovat). V deklaraci můžeme sdělit VBA jaký typ dat budeme používat (není povinné). Neuvedeme-li v deklaraci typ proměnné je automaticky použit implicitní typ dat Variant - může obsahovat data libovolného typu a velikosti.
+
* Předem určíme, jaké proměnné budeme používat.
 +
* Pro proměnnou rezervujeme prostor v paměti pro uložení její hodnoty za běhu programu
 +
* Explicitní deklarace proměnné se zapisuje před jejím vlastním použitím, zpravidla na začátku procedury události, programu, funkce.
 +
* Ve VisualBasicu začíná deklarace příkazem <code>Dim</code> (v podstatě znamená dimenze nebo dimenzovat)
 +
* V deklaraci můžeme sdělit jaký typ dat budeme do proměnné ukládat (<code>Integer</code>, <code>Double</code>, <code>String</code>,...)
 +
* Neuvedeme-li ve Visual Basicu v deklaraci typ proměnné (typ dat) je automaticky použit typ <code>Variant</code> - ten může obsahovat data libovolného typu a velikosti
 +
* Ve VisualBasicu můžeme vynutit použití explicitní deklarace pomocí příkazu '''<code>Option Explicit</code>'''
  
*Příklad přiřazení explicitní deklarace proměnné ve Visual Basicu Prijmeni datového typu String
+
'''Příklad explicitní deklarace'''
                  Dim Prijmeni As String
+
<table class="wikitable">
 +
<tr><th style="width:50%">Visual Basic</th><th style="width:50%">C#</th></tr>
 +
<tr>
 +
<td style="vertical-align:top;">
 +
<code>Dim Prijmeni As String</code><br>
 +
<code>Prijmeni = "Karel IV"</code>
  
*Příklad přiřazení explicitní deklarace proměnné ve CSharpu Prijmeni datového typu String i s přiřazením hodnoty
+
''Explicitní deklarace proměnné <code>Prijmeni</code>, která je datového typu <code>String</code>, ve VisualBasicu.''
                  string Prijmeni = "Karel IV";
+
</td>
 +
<td style="vertical-align:top;">
 +
<code>string Prijmeni = "Karel IV";</code>
  
*Příklad přiřazení hodnoty do proměnné Prijmeni
+
''Explicitní deklarace proměnné <code>Prijmeni</code>, která je datového typu <code>string</code>, v C#.''
                  Prijmeni = "Karel IV"
+
</td>
 +
</tr>
 +
<tr>
 +
<td colspan="2">
 +
S takto deklarovanými proměnnými můžeme následně dále pracovat, např. přiřadit novou hodnotu:<br>
 +
<code>Prijmeni = "Novotný"</code>
 +
</td>
 +
</tr>
 +
</table>
  
 +
=== Implicitní ===
  
*'''Implicitní'''
+
* V případě, že přímo neuvedeme deklaraci proměnné, ale rovnou proměnnou použijeme (např. v přiřazení hodnoty, ve výrazu apod.), dojde k tzv. '''implicitní deklaraci'''
 +
* V případě VisualBasicu se jedná o deklaraci proměnné bez příkazu <code>Dim</code>
 +
* Implicitní deklarace znamená, že proměnnou přímo použijeme v programu (viz příklad)
 +
* Implicitní deklarace má výhodu '''rychlejšího zápisu''' programového kódu, ale nese s sebou '''určitá rizika'''
 +
** hlavním rizikem je to, že při použití implicitních deklarací nepovažuje kompilátor jazyka případný překlep ve jméně za chybu, ale považuje překlep za deklaraci nové proměnné
  
*Jedná se o deklaraci proměnné bez příkazu Dim. Implicitní deklarace znamená, že proměnnou přímo použijeme v programu (viz příklad). Implicitní deklarace má výhodu rychlejšího zápisu programového kódu, ale nese s sebou určitá rizika. Hlavním rizikem je to, že VBA při použití implicitních deklarací nepovažuje za chybu případný překlep ve jménu proměnné a považuje překlep za deklaraci nové proměnné.
+
 
*<b>CSharp tuto deklaraci proměnné nepodporuje. V CSharpu lze provést deklaraci proměnné pouze explicitně.</b>
+
* Příklad implicitní deklarace proměnných <code>Jmeno</code> a <code>Prijmeni</code> - tyto proměnné budou mít datový typ <code>Variant</code>:
*Příklad implicitní deklarace proměnné Jmeno
+
' Implicitni deklarace
                  Jmeno = "Pepa"
+
Jmeno = "Pepa"
 +
Prijmeni = "Novak"
 +
* V případě použití explicitní deklarace by náš příklad vypadal následovně:
 +
' Explicitni deklarace
 +
Dim Jmeno As String
 +
Dim Prijmeni As String
 +
Jmeno = "Pepa"
 +
Prijmeni = "Novak"
 +
* Implicitní deklarace zavádí do kódu nebezpečí toho, že nedojde k rozpoznání překlepu, např. mějme proměnnou <code>Jmeno</code>, ve které je uložena hodnota <code>"Pepa"</code>. Budeme chtít tuto hodnotu změnit (na hodnotu <code>"Karel"</code>), ale nevšimneme si toho, že jsme ve jméně proměnné udělali překlep:
 +
' Nastavime promennou Jmeno na danou hodnotu
 +
Jmeno = "Pepa"
 +
 +
' Chceme hodnotu zmenit, ale omylem udelame preklep a nevsimneme si toho
 +
Jemno = "Karel"
 +
 +
' Misto toho, abychom zmenili hodnotu promenne Jmeno, vytvorili jsme dalsi promennou Jemno s hodnotou "Karel". Promenna Jmeno zustala nezmenena!
 +
 
 +
* ''C# tuto deklaraci proměnné '''nepodporuje'''. V C# lze použít '''pouze explicitní''' deklaraci proměnné!''
  
  
 
== Konstanta ==
 
== Konstanta ==
  
*Konstanty jsou symboly reprezentující v programu neměnnou hodnotu.
+
* Konstanty jsou symboly reprezentující v programu neměnnou hodnotu. Konstantě může být přiřazen řetězec, nebo číslo.
*Příklad konstant v jazyce C#:
+
* Příklad konstant v jazyce C#:
const int months = 12, weeks = 52, days = 365;
+
const int months = 12, weeks = 52, days = 365;
*Konstant2 je přiřazen řetězec nebo číslo,které se nemění.Uživatel si může nadefinovat svou konstantu příkazem const.Definice vlastních konstant má tuto syntaxi:
+
* Uživatel si může nadefinovat svou konstantu příkazem <code>const</code>. Definice vlastních konstant má tuto syntaxi (ve VisualBasicu):
[Public|Private] Const název konstanty [As typ] = výraz
+
[Public|Private] Const název konstanty [As typ] = výraz
 +
 +
' např.:
 +
Const Months As Integer = 12
 +
Const Weeks As Integer = 52
 +
Public Const Days As Integer = 365
 +
 +
Private Const MyTitle As String = "HELP"
  
  
 
== Pole ==
 
== Pole ==
  
*kolekce proměnných
+
* kolekce hodnot (čísel, textových řetězců, ...) daného datového typu
*'''Velikost pole''' odpovídá počtu jeho prvků. U jednorozměrného pole je tedy dána maximální hodnotou indexu. U pole dvourozměrného odpovídá součinu maximálních hodnot obou indexů.
+
* '''Velikost pole''' - odpovídá počtu jeho prvků. U jednorozměrného pole je tedy dána maximální hodnotou indexu. U pole dvourozměrného odpovídá součinu maximálních hodnot obou indexů.
*'''Index''': při deklaraci proměnných může být identifikátor proměnné opatřen indexovým rozsahem ,to je, že řada po sobě jdoucích prvků(paměťových míst) je nazvána stejným jménem,rozlišena číslem a vložena do pole,indexový rozsah udává jeden rozměr pole,teoreticky může být pole velké o n*n prvcích
+
' Jednorozměrné pole - 3 indexy (0-2) => velikost pole = 3; jedna se v podstate o 'seznam hodnot'
** příklad deklarace pole v CSharpu:
+
pole1(0) = 18
***<code>int[] poleJedenIndex = new int[10]; </code>
+
pole1(1) = 45
**** deklaruje pole s názvem poleJedenIndex o velikosti 10 prvků, indexem budou čísla od 0 do 9, každý jeden prvek bude datového typu Int32
+
pole1(2) = 10
** příklad deklarace pole ve Visual Basicu:
+
***<code>Dim MePole(10) As Integer</code>
+
' Dvourozměrné pole - indexy 2x3 (0-1, 0-2) => velikost pole = 2*3 = 6; jedna se v podstate o 'tabulku hodnot' s dvema radky a tremi sloupci
**** deklaruje pole s názvem MePole o velikosti 10 prvků, každý jeden prvek pole bude datového typu Integer
+
pole2(0,0) = 18
**** Pole může být indexováno od 0 nebo od 1. Způsob indexování závisí na nastavení příkazu Option Base. Není-li specifikován příkaz Option Base = 1, začínají se všechna pole indexovat od nuly.
+
pole2(0,1) = 45
 +
pole2(0,2) = 12
 +
 +
pole2(1,0) = 16
 +
pole2(1,1) = pole(0,2)  ' tj. nastavi prvku s indexem (1,1) stejnou hodnotu jakou obsahuje prvek s indexem (0,2) - tj. 12
 +
  pole2(1,2) = 60
  
*'''Asociativní pole: ''' je pole jehož prvky nejsou indexovány pomocí posloupnosti celých čísel, ale pomocí klíčů. Klíčem může být číslo (v nesekvenční posloupnosti), textový řetězec a jiné.
+
* '''Index''' (také nazýván jako ''klíč'') - jednoznačně identifikuje prvek v poli
 +
** většinou je indexem celé číslo, indexy většinou začínají číslem 0
 +
** pomocí indexu lze přistupovat ke konkrétnímu prvku v poli a dále s tímto prvkem pracovat (''"vrať mi '''3'''. prvek pole"'', ''"nastav '''60'''. prvku v poli hodnotu XYZ"'')
 +
** jak se s indexy pracuje (ve VisualBasicu) ukazuje příklad u předchozího bodu (''Velikost pole'')
 +
* '''Deklarace pole'''
 +
<table class="wikitable">
 +
<tr><th style="width:50%">VisualBasic</th><th style="width:50%">C#</th></tr>
 +
<tr>
 +
<td>
 +
<code>Dim MePole(10) As Integer</code>
 +
<ul>
 +
<li>Deklaruje pole s názvem <code>MePole</code> o velikosti 10 prvků, každý jeden prvek pole bude datového typu <code>Integer</code>
 +
<li>Pole může být indexováno od 0 nebo od 1. Způsob indexování závisí na nastavení příkazu <code>Option Base</code>. Není-li uveden příkaz <code>Option Base = 1</code>, začínají se všechna pole indexovat od nuly
 +
</ul>
 +
</td>
 +
<td style="vertical-align: top;">
 +
<code>int[] mePole = new int[10];</code>
 +
<ul>
 +
<li>Deklaruje pole s názvem <code>mePole</code> o velikosti 10 prvků, indexem budou čísla od <code>0</code> do <code>9</code>, každý jeden prvek bude datového typu <code>Int32</code> (celé číslo o velikosti 4 byty)
 +
</ul>
 +
</td>
 +
</tr>
 +
</table>
 +
 
 +
*'''Asociativní pole'''
 +
** je pole jehož prvky nejsou indexovány pomocí posloupnosti celých čísel, ale pomocí ''klíčů''. Klíčem může být číslo (v nesekvenční posloupnosti), textový řetězec a jiné.
 
Příklad asociativního pole v jazyce PHP:
 
Příklad asociativního pole v jazyce PHP:
$foo = array("a"=>"1", "b"=>"10", "c"=>"100");
+
 
echo $foo["c"] . $foo["b"] . $foo["a"];
+
$foo = array(
 +
    "a" => "1",
 +
    "b" => "10",
 +
    "c" => "100",
 +
    1254 => "apple item",
 +
    "name" => "John Doe"
 +
);
 +
echo $foo["c"] . $foo["b"] . $foo["a"] . $foo[1254] . $foo["name"]; // vypise text 100101apple itemJohn Doe
  
  
 
== Datové typy u databází ==
 
== Datové typy u databází ==
 
*'''MySQL datové typy'''
 
*'''MySQL datové typy'''
**'''Číselné typy'''
+
<table style="width:100%" class="wikitable">
***'''TINYINT''': Rozsah čísel: −128 až 127 nebo 0 až 255
+
<tr>
***'''SMALLINT''': Rozsah čísel: −32768 až 32767 nebo 0 až 65535
+
<th colspan="2">Číselné typy</th>
***'''MEDIUMINT''': Rozsah čísel: −8388608 až 8388607 nebo 0 až 16777215
+
</tr>
***'''INT''': Rozsah čísel: −2147483648 až 2147483647 nebo 0 až 4294967295
+
***'''Double''': Rozsah čísel: nejmenší nenulové hodnoty jsou ±2,2250738585072014E-308; největší nenulové hodnoty jsou −±1,17976931348623157E+308. Je-li sloupec UNSIGNED, jsou záporné hodnoty zakázané.
+
***Konkrétní hodnoty rozsahu čísel si pamatovat nemusí, ale je to tu, aby jste měli představu o tom o jakých číslech mluvíte.
+
**'''Řetězcové typy'''
+
***'''VARCHAR''': Rozsah: řetězec s pevně danou délkou: 0 až 255 znaků
+
***'''TEXT''': Řetězec o velké velikosti
+
*** Je jich mnohem více, ovšem tohle bohatě stačí znát
+
**'''Typy pro datum a čas'''
+
***'''DATE, TIME, DATETIME, TIMESTAMP, YEAR'''
+
  
 +
<tr>
 +
<th>Název</th>
  
== Označování proměnných ==
+
<th>Rozsah čísel</th>
 +
</tr>
 +
<tr>
 +
<td><code>TINYINT</code></td>
  
*Způsoby označování proměnných jsou závislé na použitém BASICu. Název proměnné (identifikátor) může být sestaven z jakékoliv kombinace písmen a číslic. Název nesmí začínat číslicí a rozlišují se malá a velká písmena. Dále nesmí být jako identifikátor použito vyhrazené slovo, které v příslušném jazyce má již svůj význam (IF, TO, GO, atd.). První znak vždy bývá písmeno, některé druhy BASICu dovolují na druhém místě pouze číslici, jiné pak číslice i písmena. Neměli by obsahovat háčky a čárky.
+
<td>−128 až 127&nbsp;nebo 0&nbsp;až 255</td>
 +
</tr>
  
 +
<tr>
 +
<td><code>SMALLINT</code></td>
  
== Operace s proměnnými a sestavování výrazů ==
+
<td>−32768 až 32767&nbsp;nebo 0&nbsp;až 65535</td>
 +
</tr>
  
*Aritmetické operátory
+
<tr>
**CSharp:
+
<td><code>MEDIUMINT</code></td>
***/ * + - %
+
**Visual Basic:
+
***arg + arg sečte oba argumenty
+
***arg - arg odečte oba argumenty
+
***-arg změní znaménko
+
***arg*arg vynásobí oba argumenty
+
***arg/arg vydělí první druhým
+
***argarg celočíselné dělení (výsledek je jen celá část podílu)
+
***arg1 MOD arg2 zbytek po celočíselném dělení
+
***arg1^arg2 umocnění základ arg1 mocnitelem arg2
+
  
*Relační
+
<td>−8388608 až 8388607&nbsp;nebo 0&nbsp;až 16777215</td>
**CSharp:
+
</tr>
***< > <= >= != ==
+
**Visual Basic:
+
***arg1 < arg2 výsledek je true , je-li arg1 menší než arg2 , jinak false
+
***arg1 > arg2 výsledek je true , je-li arg1 větší než arg2 , jinak false
+
***arg1 = arg2 výsledek je true , je-li arg1 větší nebo roven arg2 , jinak false
+
***arg1 = arg2 výsledek je true , je-li arg1 roven arg2 , jinak false
+
***arg1 arg2 výsledek je true , když arg1 není roven arg2 , jinak false
+
***Like prověří , zda se v řetězci nachází určitý vzorek
+
***Is prověří ,zda existuje objektová proměnná daného typu , nebo zda dvě
+
**objektové proměnné obsahují odkaz na stejný objekt.
+
  
*Logické
+
<tr>
**CSharp:
+
<td><code>INT</code></td>
***! && ||
+
 
**Visual Basic:
+
<td>−2147483648 až 2147483647&nbsp;nebo 0&nbsp;až 4294967295</td>
***arg1 AND arg2 logický součin obou argumentů
+
</tr>
***arg1 OR arg2 log. součet obou argumentů
+
 
***arg1 XOR arg2 výlučně OR (nonekvivalence) argumentů
+
<tr>
***NOT arg negace arg.
+
<td><code>DOUBLE</code></td>
***arg1 IMP arg2 implikace arg.
+
 
***arg1 EQV arg2 ekvivalence arg.
+
<td>nejmenší nenulové hodnoty jsou ±2,2250738585&shy;072014E-308; největší nenulové hodnoty jsou −±1,179769313&shy;48623157E+308&shy;.&nbsp;Je-li sloupec <code>UNSIGNED</code>, jsou záporné hodnoty zakázané.<br>
 +
</td>
 +
</tr>
 +
 
 +
<tr>
 +
<th colspan="2">Řetězcové typy</th>
 +
</tr>
 +
 
 +
<tr>
 +
<th>Název</th>
 +
 
 +
<th>Velikost</th>
 +
</tr>
 +
 
 +
<tr>
 +
<td><code>VARCHAR</code></td>
 +
 
 +
<td>řetězec s&nbsp;pevně danou délkou&nbsp;&ndash; od 0&nbsp;do 255&nbsp;znaků</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td><code>TEXT</code></td>
 +
 
 +
<td>řetězec o&nbsp;velké velikosti</td>
 +
</tr>
 +
 
 +
<tr>
 +
<td colspan="2"><em>a spousta dalších řetězcových typů...</em></td>
 +
</tr>
 +
 
 +
<tr>
 +
<th colspan="2">Typy pro datum a čas</th>
 +
</tr>
 +
 
 +
<tr>
 +
<td><code>DATE</code>, <code>TIME</code>, <code>DATETIME</code>,
 +
<code>TIMESTAMP</code>,&nbsp;<code>YEAR</code></td>
 +
 
 +
<td>typy pro reprezentaci datumu a času</td>
 +
</tr>
 +
</table>
 +
 
 +
 
 +
== Označování proměnných ==
 +
* To jak proměnnou označíme (pojmenujeme) závisí na použitém programovacím jazyce. Obecně lze pojmenovat proměnnou podle následujících pravidel (tato pravidla většinou platí i pro pojmenování funkcí a procedur):
 +
** název proměnné ('''identifikátor''') může být sestaven z libovolné kombinace písmen a číslic a případně dalších znaků (většinou se používá ještě podtržítko <code>_</code>)
 +
** název nesmí začínat číslicí
 +
** rozlišují se malá a velká písmena
 +
** jako identifikátor nesmí být použito klíčové (vyhrazené) slovo daného programovacího jazyka (<code>if</code>, <code>then</code>, <code>for</code>, <code>else</code>, ...)
 +
** název by neměl obsahovat háčky a čárky (může způsobovat problémy)
 +
 
 +
 
 +
== Operace s proměnnými a sestavování výrazů ==
  
<ul>
 
<li>Bitové
 
 
<table class="wikitable">
 
<table class="wikitable">
<tr><th>bit1 <th>bit2 <th>výsledek</tr>
+
<tr>
<tr><td>0 <td>0 <td>1</tr>  
+
<th style="width:25%">VisualBasic</th>
<tr><td>0 <td>1 <td>1</tr>
+
<th style="width:25%">C#</th>
<tr><td>1 <td>0 <td>0</tr>
+
<th>Popis</th>
<tr><td>1 <td>1 <td>1</tr>
+
<th>Příklad</th>
</table></li>
+
</tr>
</ul>
+
<tr>
 +
<th style="width:100%" colspan="4">Aritmetické operátory</th>
 +
</tr>
 +
<tr>
 +
<td>
 +
<code>+</code>
 +
</td>
 +
<td>
 +
<code>+</code>
 +
</td>
 +
<td>sčítání</td>
 +
<td>
 +
<code>1 + 2</code>
 +
</td>
 +
</tr>
 +
<tr>
 +
<td>
 +
<code>-</code>
 +
</td>
 +
<td>
 +
<code>-</code>
 +
</td>
 +
<td>odčítání</td>
 +
<td>
 +
<code>2 - 1</code>
 +
</td>
 +
</tr>
 +
<tr>
 +
<td>
 +
<code>/</code>
 +
</td>
 +
<td>
 +
<code>/</code>
 +
</td>
 +
<td>dělení</td>
 +
<td>
 +
<code>30/10</code>
 +
</td>
 +
</tr>
 +
<tr>
 +
<td>
 +
<code>*</code>
 +
</td>
 +
<td>
 +
<code>*</code>
 +
</td>
 +
<td>násobení</td>
 +
<td>
 +
<code>3 * 3</code>
 +
</td>
 +
</tr>
 +
<tr>
 +
<td>
 +
<code>Mod</code>
 +
</td>
 +
<td>
 +
<code>%</code>
 +
</td>
 +
<td>modulo – zbytek po celočíselném dělení</td>
 +
<td>
 +
<code>7 Mod 3</code>
 +
výsledek bude
 +
<code>1</code>
 +
</td>
 +
</tr>
 +
<tr>
 +
<td>
 +
<code>\</code>
 +
</td>
 +
<td> </td>
 +
<td>celočíselné dělení</td>
 +
<td>
 +
<code>7 \ 3</code>
 +
výsledek bude
 +
<code>2</code>
 +
</td>
 +
</tr>
 +
<tr>
 +
<th style="width:100%" colspan="4">Relační (porovnávací) operátory</th>
 +
</tr>
 +
<tr>
 +
<td colspan="4">
 +
<em>
 +
Relační operátory vrací hodnotu
 +
<code>TRUE</code>
 +
, pokud vztah platí, jinak vrací
 +
<code>FALSE</code>
 +
.
 +
</em>
 +
</td>
 +
</tr>
 +
<tr>
 +
<td>
 +
<code>&lt;</code>
 +
</td>
 +
<td>
 +
<code>&lt;</code>
 +
</td>
 +
<td>menší než</td>
 +
<td>
 +
<code>1 &lt; 2</code>
 +
</td>
 +
</tr>
 +
<tr>
 +
<td>
 +
<code>></code>
 +
</td>
 +
<td>
 +
<code>></code>
 +
</td>
 +
<td>větší než</td>
 +
<td>
 +
<code>2 > 1</code>
 +
</td>
 +
</tr>
 +
<tr>
 +
<td>
 +
<code>&lt;=</code>
 +
</td>
 +
<td>
 +
<code>&lt;=</code>
 +
</td>
 +
<td>menší nebo rovno</td>
 +
<td>
 +
<code>10 &lt;= 10</code>
 +
,
 +
<code>20 &lt;= 30</code>
 +
,…
 +
</td>
 +
</tr>
 +
<tr>
 +
<td>
 +
<code>>=</code>
 +
</td>
 +
<td>
 +
<code>>=</code>
 +
</td>
 +
<td>větší nebo rovno</td>
 +
<td>
 +
<code>3 >= 3</code>
 +
,
 +
<code>10 >= 5</code>
 +
, …
 +
</td>
 +
</tr>
 +
<tr>
 +
<td>
 +
<code>&lt;></code>
 +
</td>
 +
<td>
 +
<code>!=</code>
 +
</td>
 +
<td>není rovno</td>
 +
<td>
 +
<code>7 &lt;> 3</code>
 +
→ výsledek bude
 +
<code>TRUE</code>
 +
,
 +
<code>5 &lt;> 5</code>
 +
→ výsledek bude 
 +
<code>FALSE</code>
 +
</td>
 +
</tr>
 +
<tr>
 +
<td>
 +
<code>=</code>
 +
</td>
 +
<td>
 +
<code>==</code>
 +
</td>
 +
<td>je rovno</td>
 +
<td>
 +
<code>10 = 10</code>
 +
→ výsledek bude
 +
<code>TRUE</code>
 +
,
 +
<br>
 +
<code>5 = 2</code>
 +
→ výsledek bude 
 +
<code>FALSE</code>
 +
</td>
 +
</tr>
 +
<tr>
 +
<td>
 +
<code>Like</code>
 +
</td>
 +
<td> </td>
 +
<td>prověří , zda se v řetězci nachází určitý vzorek</td>
 +
<td> </td>
 +
</tr>
 +
<tr>
 +
<th style="width:100%" colspan="4">Logické operátory</th>
 +
</tr>
 +
<tr>
 +
<td>
 +
<code>AND</code>
 +
</td>
 +
<td>
 +
<code>&amp;&amp;</code>
 +
</td>
 +
<td>logický součin</td>
 +
<td> </td>
 +
</tr>
 +
<tr>
 +
<td>
 +
<code>OR</code>
 +
</td>
 +
<td>
 +
<code>||</code>
 +
</td>
 +
<td>logický součet</td>
 +
<td> </td>
 +
</tr>
 +
<tr>
 +
<td>
 +
<code>XOR</code>
 +
</td>
 +
<td><code>^</code></td>
 +
<td>
 +
exkluzivní
 +
<code>OR</code>
 +
(
 +
<em>buď …, anebo …</em>
 +
)
 +
</td>
 +
<td>
 +
<code>0 XOR 0</code>
 +
 +
<code>0</code>
 +
<br>
 +
<code>0 XOR 1</code>
 +
 +
<code>1</code>
 +
<br>
 +
<code>1 XOR 0</code>
 +
 +
<code>1</code>
 +
<br>
 +
<code>1 XOR 1</code>
 +
→ 
 +
<code>0</code>
 +
</td>
 +
</tr>
 +
<tr>
 +
<td>
 +
<code>NOT</code>
 +
</td>
 +
<td>
 +
<code>!</code>
 +
</td>
 +
<td>negace argumentu</td>
 +
<td>
 +
<code>NOT TRUE</code>
 +
 +
<code>FALSE</code>
 +
<br>
 +
<code>NOT FALSE</code>
 +
→ 
 +
<code>TRUE</code>
 +
</td>
 +
</tr>
 +
</table>
 +
 
  
 
== Priorita operátorů ==
 
== Priorita operátorů ==
  
 
Určuje pořadí vyhodnocování částí výrazu. Nejvyšší prioritu mají operátory aritmetické, pak následují relační a nejnižší prioritu u kombinovaných výrazů mají logické operátory.
 
Určuje pořadí vyhodnocování částí výrazu. Nejvyšší prioritu mají operátory aritmetické, pak následují relační a nejnižší prioritu u kombinovaných výrazů mají logické operátory.
V rámci aritmetických operátorů mají vyšší prioritu * a / před + a -.
+
V rámci aritmetických operátorů mají vyšší prioritu <code>*</code> a <code>/</code> před <code>+</code> a <code>-</code>.

Aktuální verze z 7. 5. 2012, 15:29

  • základní datové typy v jazyce C#
  • explicitní a implicitní deklarace proměnných
  • konstanta
  • pole (velikost pole, rozměr pole, index, asociativní pole)
  • datové typy u databází
  • označování proměnných
  • operace s proměnnými a sestavování výrazů
  • priorita operátorů


Obsah

Základní datové typy

Konkrétní hodnoty rozsahu čísel si pamatovat nemusíte, je to tu, aby jste měli představu o tom, o jakých číslech mluvíte.

VB C#
Celočíselné
Byte zabírá 1 byte (0–255)    
Integer zabírá 2 byty, číslo se znaménkem (-32768 až 32767) int zabírá 4 byty
Long zabírá 4 byty, celočíselná hodnota (-2147483648 až 2147483647) long zabírá 8 bytů
Reálné
Decimal zabírá 14 bytů, číslo se znaménkem, lze ho použít jen pomocí Variant, jehož je podtypem    
Single zabírá 4 byty, číselná hodnota (-3.402823E38 až –1.401298E-45 pro záporné hodnoty, 1,401298E-45 až 3,402823E38 pro kladné hodnoty) float zabírá 4 byty
Double zabírá 8 bytů, obdoba Single s dvoujnásobnou přesností double zabírá 8 bytů
Logické
Boolean zabírá 2 byty, uchovává hodnotu True (pravda), nebo False (lež) bool zabírá 1 byte, logická hodnota – nabývá hodnot true, nebo false
Řetězcové
String řetězec libovolných znaků kódovaných pomocí ASCII, délka prakticky

neomezena (asi 2 miliardy znaků); dělí se na řetězec pevné a

dynamické délky
string posloupnost znaků (řetězec), 2 byty na jeden znak
Nestandardní
Object zabírá 4 byty, obsahuje odkaz na objekt (adresu objektu v paměti) object podle přiřazené hodnoty přiřazuje i datový typ
object a;
a = 1;
proměnná a je typu Int32
Variant zabírá 16 bytů, obecný datový typ, který může obsahovat jeden

z výše uvedených datových typů, proměnná tohoto typu může dynamicky

měnit svůj datový typ
   
Date zabírá 8 bytů, obsahuje hodnotu odpovídající datumu a času (1.leden 100 až 31.prosinec 9999,00:00:00 až 23:59:59 DateTime uchovává datum a čas



Explicitní a implicitní deklarace proměnných

Explicitní

  • Předem určíme, jaké proměnné budeme používat.
  • Pro proměnnou rezervujeme prostor v paměti pro uložení její hodnoty za běhu programu
  • Explicitní deklarace proměnné se zapisuje před jejím vlastním použitím, zpravidla na začátku procedury události, programu, funkce.
  • Ve VisualBasicu začíná deklarace příkazem Dim (v podstatě znamená dimenze nebo dimenzovat)
  • V deklaraci můžeme sdělit jaký typ dat budeme do proměnné ukládat (Integer, Double, String,...)
  • Neuvedeme-li ve Visual Basicu v deklaraci typ proměnné (typ dat) je automaticky použit typ Variant - ten může obsahovat data libovolného typu a velikosti
  • Ve VisualBasicu můžeme vynutit použití explicitní deklarace pomocí příkazu Option Explicit

Příklad explicitní deklarace

Visual BasicC#

Dim Prijmeni As String
Prijmeni = "Karel IV"

Explicitní deklarace proměnné Prijmeni, která je datového typu String, ve VisualBasicu.

string Prijmeni = "Karel IV";

Explicitní deklarace proměnné Prijmeni, která je datového typu string, v C#.

S takto deklarovanými proměnnými můžeme následně dále pracovat, např. přiřadit novou hodnotu:
Prijmeni = "Novotný"

Implicitní

  • V případě, že přímo neuvedeme deklaraci proměnné, ale rovnou proměnnou použijeme (např. v přiřazení hodnoty, ve výrazu apod.), dojde k tzv. implicitní deklaraci
  • V případě VisualBasicu se jedná o deklaraci proměnné bez příkazu Dim
  • Implicitní deklarace znamená, že proměnnou přímo použijeme v programu (viz příklad)
  • Implicitní deklarace má výhodu rychlejšího zápisu programového kódu, ale nese s sebou určitá rizika
    • hlavním rizikem je to, že při použití implicitních deklarací nepovažuje kompilátor jazyka případný překlep ve jméně za chybu, ale považuje překlep za deklaraci nové proměnné


  • Příklad implicitní deklarace proměnných Jmeno a Prijmeni - tyto proměnné budou mít datový typ Variant:
' Implicitni deklarace
Jmeno = "Pepa"
Prijmeni = "Novak"
  • V případě použití explicitní deklarace by náš příklad vypadal následovně:
' Explicitni deklarace
Dim Jmeno As String
Dim Prijmeni As String
Jmeno = "Pepa"
Prijmeni = "Novak"
  • Implicitní deklarace zavádí do kódu nebezpečí toho, že nedojde k rozpoznání překlepu, např. mějme proměnnou Jmeno, ve které je uložena hodnota "Pepa". Budeme chtít tuto hodnotu změnit (na hodnotu "Karel"), ale nevšimneme si toho, že jsme ve jméně proměnné udělali překlep:
' Nastavime promennou Jmeno na danou hodnotu
Jmeno = "Pepa"

' Chceme hodnotu zmenit, ale omylem udelame preklep a nevsimneme si toho
Jemno = "Karel"

' Misto toho, abychom zmenili hodnotu promenne Jmeno, vytvorili jsme dalsi promennou Jemno s hodnotou "Karel". Promenna Jmeno zustala nezmenena!
  • C# tuto deklaraci proměnné nepodporuje. V C# lze použít pouze explicitní deklaraci proměnné!


Konstanta

  • Konstanty jsou symboly reprezentující v programu neměnnou hodnotu. Konstantě může být přiřazen řetězec, nebo číslo.
  • Příklad konstant v jazyce C#:
const int months = 12, weeks = 52, days = 365;
  • Uživatel si může nadefinovat svou konstantu příkazem const. Definice vlastních konstant má tuto syntaxi (ve VisualBasicu):
[Public|Private] Const název konstanty [As typ] = výraz

' např.:
Const Months As Integer = 12
Const Weeks As Integer = 52
Public Const Days As Integer = 365

Private Const MyTitle As String = "HELP"


Pole

  • kolekce hodnot (čísel, textových řetězců, ...) daného datového typu
  • Velikost pole - odpovídá počtu jeho prvků. U jednorozměrného pole je tedy dána maximální hodnotou indexu. U pole dvourozměrného odpovídá součinu maximálních hodnot obou indexů.
' Jednorozměrné pole - 3 indexy (0-2) => velikost pole = 3; jedna se v podstate o 'seznam hodnot'
pole1(0) = 18
pole1(1) = 45
pole1(2) = 10

' Dvourozměrné pole - indexy 2x3 (0-1, 0-2) => velikost pole = 2*3 = 6; jedna se v podstate o 'tabulku hodnot' s dvema radky a tremi sloupci
pole2(0,0) = 18
pole2(0,1) = 45
pole2(0,2) = 12

pole2(1,0) = 16
pole2(1,1) = pole(0,2)   ' tj. nastavi prvku s indexem (1,1) stejnou hodnotu jakou obsahuje prvek s indexem (0,2) - tj. 12
pole2(1,2) = 60
  • Index (také nazýván jako klíč) - jednoznačně identifikuje prvek v poli
    • většinou je indexem celé číslo, indexy většinou začínají číslem 0
    • pomocí indexu lze přistupovat ke konkrétnímu prvku v poli a dále s tímto prvkem pracovat ("vrať mi 3. prvek pole", "nastav 60. prvku v poli hodnotu XYZ")
    • jak se s indexy pracuje (ve VisualBasicu) ukazuje příklad u předchozího bodu (Velikost pole)
  • Deklarace pole
VisualBasicC#

Dim MePole(10) As Integer

  • Deklaruje pole s názvem MePole o velikosti 10 prvků, každý jeden prvek pole bude datového typu Integer
  • Pole může být indexováno od 0 nebo od 1. Způsob indexování závisí na nastavení příkazu Option Base. Není-li uveden příkaz Option Base = 1, začínají se všechna pole indexovat od nuly

int[] mePole = new int[10];

  • Deklaruje pole s názvem mePole o velikosti 10 prvků, indexem budou čísla od 0 do 9, každý jeden prvek bude datového typu Int32 (celé číslo o velikosti 4 byty)
  • Asociativní pole
    • je pole jehož prvky nejsou indexovány pomocí posloupnosti celých čísel, ale pomocí klíčů. Klíčem může být číslo (v nesekvenční posloupnosti), textový řetězec a jiné.

Příklad asociativního pole v jazyce PHP:

$foo = array(
    "a" => "1",
    "b" => "10",
    "c" => "100",
    1254 => "apple item",
    "name" => "John Doe"
);
echo $foo["c"] . $foo["b"] . $foo["a"] . $foo[1254] . $foo["name"]; // vypise text 100101apple itemJohn Doe


Datové typy u databází

  • MySQL datové typy
Číselné typy
Název Rozsah čísel
TINYINT −128 až 127 nebo 0 až 255
SMALLINT −32768 až 32767 nebo 0 až 65535
MEDIUMINT −8388608 až 8388607 nebo 0 až 16777215
INT −2147483648 až 2147483647 nebo 0 až 4294967295
DOUBLE nejmenší nenulové hodnoty jsou ±2,2250738585­072014E-308; největší nenulové hodnoty jsou −±1,179769313­48623157E+308­. Je-li sloupec UNSIGNED, jsou záporné hodnoty zakázané.
Řetězcové typy
Název Velikost
VARCHAR řetězec s pevně danou délkou – od 0 do 255 znaků
TEXT řetězec o velké velikosti
a spousta dalších řetězcových typů...
Typy pro datum a čas
DATE, TIME, DATETIME, TIMESTAMPYEAR typy pro reprezentaci datumu a času


Označování proměnných

  • To jak proměnnou označíme (pojmenujeme) závisí na použitém programovacím jazyce. Obecně lze pojmenovat proměnnou podle následujících pravidel (tato pravidla většinou platí i pro pojmenování funkcí a procedur):
    • název proměnné (identifikátor) může být sestaven z libovolné kombinace písmen a číslic a případně dalších znaků (většinou se používá ještě podtržítko _)
    • název nesmí začínat číslicí
    • rozlišují se malá a velká písmena
    • jako identifikátor nesmí být použito klíčové (vyhrazené) slovo daného programovacího jazyka (if, then, for, else, ...)
    • název by neměl obsahovat háčky a čárky (může způsobovat problémy)


Operace s proměnnými a sestavování výrazů

VisualBasic C# Popis Příklad
Aritmetické operátory

+

+

sčítání

1 + 2

-

-

odčítání

2 - 1

/

/

dělení

30/10

*

*

násobení

3 * 3

Mod

%

modulo – zbytek po celočíselném dělení

7 Mod 3 výsledek bude 1

\

  celočíselné dělení

7 \ 3 výsledek bude 2

Relační (porovnávací) operátory

Relační operátory vrací hodnotu TRUE , pokud vztah platí, jinak vrací FALSE .

<

<

menší než

1 < 2

>

>

větší než

2 > 1

<=

<=

menší nebo rovno

10 <= 10 , 20 <= 30 ,…

>=

>=

větší nebo rovno

3 >= 3 , 10 >= 5 , …

<>

!=

není rovno

7 <> 3 → výsledek bude TRUE , 5 <> 5 → výsledek bude  FALSE

=

==

je rovno

10 = 10 → výsledek bude TRUE ,
5 = 2 → výsledek bude  FALSE

Like

  prověří , zda se v řetězci nachází určitý vzorek  
Logické operátory

AND

&&

logický součin  

OR

||

logický součet  

XOR

^

exkluzivní OR ( buď …, anebo … )

0 XOR 00
0 XOR 11
1 XOR 01
1 XOR 1 →  0

NOT

!

negace argumentu

NOT TRUEFALSE
NOT FALSE →  TRUE


Priorita operátorů

Určuje pořadí vyhodnocování částí výrazu. Nejvyšší prioritu mají operátory aritmetické, pak následují relační a nejnižší prioritu u kombinovaných výrazů mají logické operátory. V rámci aritmetických operátorů mají vyšší prioritu * a / před + a -.

Osobní nástroje
Jmenné prostory
Varianty
Akce
Navigace
Nástroje