NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
IT rekvalifikace s podporou uplatnění. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Avatar
Paradise
Tvůrce
Avatar
Paradise:24.7.2013 13:39

Zdravím, dnes jsem objevil zajímavý problém. VS 12 Express mi nežere klíčové slovo var. Vůbec netuěím proč, v aplikacích je nastavený nejnovější .NET Framework. Mám ještě verzi pro Windows Phone a tam to normálně jde. Kde by mohl být problém?

 
Odpovědět
24.7.2013 13:39
Avatar
Juraj Mlich
Tvůrce
Avatar
Juraj Mlich:24.7.2013 13:41

Kľúčové slovo var môže byť myslím iba v metodách :)

 
Nahoru Odpovědět
24.7.2013 13:41
Avatar
Paradise
Tvůrce
Avatar
Odpovídá na Juraj Mlich
Paradise:24.7.2013 13:44

Ok, jdu se zastřelit. Programování se věnuju už docela dlouho, ale tohodle jsem si nikde nevšiml. Asi to ví každý, protože jsem to nevygooglil. sdraco by mohl tohle vlákno smazat, ať mi to nekazí reputaci :D

 
Nahoru Odpovědět
24.7.2013 13:44
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Paradise
Jan Vargovský:24.7.2013 13:50

V jaké situaci ti ho "nežere" ? :)

 
Nahoru Odpovědět
24.7.2013 13:50
Avatar
Odpovídá na Paradise
Michal Žůrek - misaz:24.7.2013 14:04

var nepoužívej...

 
Nahoru Odpovědět
24.7.2013 14:04
Avatar
Juraj Mlich
Tvůrce
Avatar
Juraj Mlich:24.7.2013 14:18

Nič si z toho nerob, ja tiež už programujem dlho a tiež je niekde vlákno s tým istým obsahom. :)

 
Nahoru Odpovědět
24.7.2013 14:18
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
Jan Vargovský:24.7.2013 18:16

Proč by neměl ? o_O

 
Nahoru Odpovědět
24.7.2013 18:16
Avatar
Odpovídá na Jan Vargovský
Michal Žůrek - misaz:24.7.2013 18:17

var by se měl používat jen na věci kde dopředu přímo není znám datový typ.

Editováno 24.7.2013 18:20
 
Nahoru Odpovědět
24.7.2013 18:17
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
Kit:24.7.2013 18:28

V Javě se místo var používá Object. Pokud je výsledek funkce značně polymorfní a potřebuji třeba jen metodu toString(), tak to používám. Jinak bývá s analýzou toho objektu a následným přetypováním dost práce.

Editováno 24.7.2013 18:28
Nahoru Odpovědět
24.7.2013 18:28
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Michal Žůrek - misaz
Jan Vargovský:24.7.2013 18:37

Ty si řekl, že ho nemá používat a pak mi řekneš: "používej jen tehdy...". Proto mě to zarazilo.

Kit: v Javě nění nic jako GetType() nebo typeof() ?

 
Nahoru Odpovědět
24.7.2013 18:37
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Kit:24.7.2013 18:58

V Javě je dokonce operátor instanceof a funguje velmi dobře, protože porovná třídu se všemi rodiči objektu. Praktičtější však je použít interface, protože chyby v programu odhalíš už při kompilaci.

Snad z toho pochopíš i proč se nemá používat var.

Editováno 24.7.2013 18:59
Nahoru Odpovědět
24.7.2013 18:58
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Kit
Jan Vargovský:24.7.2013 19:07

Proč zbytečně vytvářet nové třídy na to, že potřebuju prohrabat kolekci a sesbírat jen to co potřebuju, tím myslím LINQ dotazy... Já osobně si to bez klíčového slova var moc nedokážu představit :)

 
Nahoru Odpovědět
24.7.2013 19:07
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Jan Vargovský
Kit:24.7.2013 19:10

Můžeš místo var použít interface pro LINQ dotaz. Nebudeš pak muset přetypovávat.

Nahoru Odpovědět
24.7.2013 19:10
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Kit
Jan Vargovský:24.7.2013 19:16

No toje jedno, zrovna toto byla věc na kterou jsem se ptal docela dost lidí i kolegů a každý mi odpověděl, že je to namístě :)

 
Nahoru Odpovědět
24.7.2013 19:16
Avatar
Luboš Běhounek Satik:24.7.2013 19:17

Já mám pořád pocit, že nechápete (resp. spousta lidí tu nechápe), co var dělá... :)

Editováno 24.7.2013 19:17
Nahoru Odpovědět
24.7.2013 19:17
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:24.7.2013 19:27

Asi to také nechápu. var vidím jen jako berličku pro ty, kteří nevědí, jakého typu bude výsledek výrazu. Ať žije Python, u něj je takové použití zcela běžné, dokonce tam to slovo var ani není. Přitom se také jedná o silně typovaný jazyk.

Nahoru Odpovědět
24.7.2013 19:27
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:24.7.2013 19:32

Proc bych mel psat cely nazev typu, kdyz si ho prekladac muze odvodit z druhe strany?

Nasledujici dva kody maji naprosto identicky vysledek a i poznam, jakeho typu promenna slovnik je, jen ten jeden zpusob ma kratsi zapis.

Dictionary<String, int> slovnik = new Dictionary<String, int>();
var slovnik = new Dictionary<String, int>();

Porad nechapu, co se vam na tom nelibi.

Nahoru Odpovědět
24.7.2013 19:32
https://www.facebook.com/peasantsandcastles/
Avatar
Odpovídá na Luboš Běhounek Satik
Michal Žůrek - misaz:24.7.2013 19:33

psát pokaždé kdy to jde datový typ je DOPORUČENÍ. Právě prto se tím všichni musí řídit.

 
Nahoru Odpovědět
24.7.2013 19:33
Avatar
Odpovídá na Michal Žůrek - misaz
Luboš Běhounek Satik:24.7.2013 19:37

Pokud by se tim kazdy musel ridit, nebylo by to doporuceni, ale spis treba pravidlo :)

Datovy typ poznas vetsinou z prave casti, takze tam v podstate je.

A odkud to doporuceni je? Potkal jsem ho jen jako doporuceni tykajici se psani MSDN napovedy (examplu), ale ne nijak obecne.

Nahoru Odpovědět
24.7.2013 19:37
https://www.facebook.com/peasantsandcastles/
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Luboš Běhounek Satik
Kit:24.7.2013 19:46

Aha, takže var není ekvivalentem třídy Object v Javě. Je to syntaktický cukr.

using System;
using System.Collections.Generic;

static class Program {
    static void Main() {
        var slovnik = new Dictionary<String, int>();
        Console.WriteLine(slovnik.GetType());
    }
}

Výsledek:

System.Collections.Generic.Dictionary`2[System.String,System.Int32]
Editováno 24.7.2013 19:49
Nahoru Odpovědět
24.7.2013 19:46
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Luboš Běhounek Satik:24.7.2013 19:54

Přesně tak, je to jen syntaktický cukr. Jakmile jednou do proměnné var něco nacpeš, už tam žádný jiný typ nedostaneš, např.

var s="string";
s = 15;

Tě nenechá ani zkompilovat, protože hned na prvním řádku už ví, že proměnná s je typu string a také ti tak našeptává apod.

Jinak C# má vlastní třídu object, od které všechny objekty dědí a do které pak můžeš nacpat (téměř) cokoliv, to je ale něco úplně jiného.

C# ještě pak má typ dynamic, ten umí psí kusy a můžeš na něm třeba volat metody, o kterých v době kompilace ani nevíš a pokud ten objekt tu metodu nemá, tak dostaneš run-time výjimku.

Nahoru Odpovědět
24.7.2013 19:54
https://www.facebook.com/peasantsandcastles/
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Kit
Jan Vargovský:24.7.2013 20:00

Jo, to jsem vytrhl z projektu a bylo to pro celou třídu, ale kdyby to bylo jen jako nějaký result nějaké vyhledávací metody nebo tak, ukroj z toho to private :)

Editováno 24.7.2013 20:03
 
Nahoru Odpovědět
24.7.2013 20:00
Avatar
Odpovídá na Jan Vargovský
Luboš Běhounek Satik:24.7.2013 20:02

zrovna

private List<List<object>> foo = new List<List<object>>();

asi ne, var můžeš používat jen uvnitř metod, na členy třídy var použít nemůžeš :)

Nahoru Odpovědět
24.7.2013 20:02
https://www.facebook.com/peasantsandcastles/
Avatar
Jan Vargovský
Tvůrce
Avatar
Jan Vargovský:24.7.2013 20:05

Áha, dám odpovědět a místo toho je edit -.- Znova to psát nebudu, aspoň satík zastihl mojí odpověď :D

 
Nahoru Odpovědět
24.7.2013 20:05
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 24 zpráv z 24.