Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Podmíněný konstruktor

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Podmíněný konstruktor

Autor: Mi.Chal ♂

11:58:23 13.01.2013

Pokud se má objekt vytvářet jenom za určitých podmínek, tak je zřejmě nejjednodušší jej vytvářet jenom někdy, takže ta podmínka nemá být v konstruktoru, tehdy už objekt existuje. Řešil bych to metodou, která bude vracet buď nově vytvořený objekt nebo null - třeba to může být statická metoda nebo to může zajišťovat nějaká factory třída.

Citovat příspěvek

 

Re: Podmíněný konstruktor

Autor: TC ♂

9:38:30 13.01.2013

JardaJirava napsal/a

Ahoj,
.... protoze jsi nekde zapomel na if (ktery navic zvysuje cyclomatickou komplexitu).

Pekny den,



Myslim, ze by se do Microsoftu mela zaslat petice pracujicich pozadujici odstraneni konstruktu

xxx.TryParse();

protoze to zbytecne zvysuje cyclomatickou komplexitu, a navic to pisalky programu odvadi od roztomile vyjimky emitovane xxx.Parse();

Zdravim

TC

Citovat příspěvek

 

Re: Podmíněný konstruktor

Autor: TC ♂

21:14:22 12.01.2013

O kolik vice linarne nezavislych cest vznikne pouzitim if ve srovnani s obsluhou vyjimky?

Dekuji za rozsireni mych obzoru.

Zdravim

TC

Citovat příspěvek

 

Re: Podmíněný konstruktor

Autor: JardaJirava ♂

19:44:12 12.01.2013

Ahoj,

JerryM napsal/a

...to teda od vás opravdu není pěkné ... takhle navádět nějakýho amatéra, kterej neví o co de k tomu aby hned po vytvoření objektu ho hned zase zrušil něčim jako throw error.... máš milý usere252 vůbec ponětí kolik času zabere vytvořit objekt ? přece nebudeš vytvářet objekt jenom proto aby si ho zrušil.... zkus si někde na webu najít co je to tabulka virtuálních metod, jak to souvisí se systémem .NET, co to obnáší a tak podobně.....

pak se divíte proč všichni nadávaj jak je to .NET pomalý ... ale ono to neni pomalý ... ono se to jenom musí umět naprogramovat :-)



muzes osvetlit, jak mi tabulka virtualnich metod pomuze s rozhodovanim, zda vytvorit objekt ci nikoliv? Nejak tam tu souvislost nevidim.

Navic vytvoreni objektu neni drahe, jen by, melo probehnout rychle a po jeho zavolani mel byt objekt v definovanem a spravnem stavu.

A jak jsem psal, mozny zpusob je vyuzit Factory, ktera objekt bud vytvori, nebo vyhodi vyjimku.

Mimochodem, nenech se zmast, obsluha vyjimek je sice narocna, ale neni to nikterak dramaticke, pokud vis, jak a hlavne kde mas vyjimku odchytit. Ano, ridit beh programu vyjimkami neni spravne, ale vyjimka je to proto, ze se jedna o vyjimecny stav, ke kteremu by zrejme nemelo dojit. A lepsi si zpracovat vlastni vyjimku, nez se pak setkat s null reference exception, protoze jsi nekde zapomel na if (ktery navic zvysuje cyclomatickou komplexitu).

Pekny den,

Citovat příspěvek

 

Re: Podmíněný konstruktor

Autor: TC ♂

19:33:56 12.01.2013

JerryM napsal/a

...to teda od vás opravdu není pěkné ....... máš milý usere252 vůbec ponětí kolik času zabere vytvořit objekt ? přece nebudeš vytvářet objekt jenom proto aby si ho zrušil....



To je blabol, vytvoreny objektu je levne. Drahe je az to throw.

Zdravim

TC

Citovat příspěvek

 

Re: Podmíněný konstruktor

Autor: JerryM ♀

17:21:20 12.01.2013

...to teda od vás opravdu není pěkné ... takhle navádět nějakýho amatéra, kterej neví o co de k tomu aby hned po vytvoření objektu ho hned zase zrušil něčim jako throw error.... máš milý usere252 vůbec ponětí kolik času zabere vytvořit objekt ? přece nebudeš vytvářet objekt jenom proto aby si ho zrušil.... zkus si někde na webu najít co je to tabulka virtuálních metod, jak to souvisí se systémem .NET, co to obnáší a tak podobně.....

pak se divíte proč všichni nadávaj jak je to .NET pomalý ... ale ono to neni pomalý ... ono se to jenom musí umět naprogramovat :-)

Citovat příspěvek

 

Re: Podmíněný konstruktor

Autor: TC ♂

15:05:49 11.01.2013

JardaJirava napsal/a

Ahoj,

ve zminenem reseni vidim nasledujici problem. Vyvojar, potazmo uzivatel nepozna, kde je chyba. Beh programu bude obsahovat dalsi if - a po nem bude nasledovat co (vyhozeni vyjimky)?

Ano, pouziti factory pro vytvareni objektu je urcite vhodnym nastrojem.

Pekny den,


Nazdar,

Dovolil bych si poznamenat, ze ocekavat to, ze spatny vstup se stane jen vyjimecne je dosti optimisticke.

Dale si myslim, ze povazovat chybny vstupni parametr za katastrofu nutici program k predcasnemu ukonceni je ponekud arogantni.

Vezmeme si moznosti:

1. male pismeno vyvola vyjimku
2. male pismeno vyrobi null misto objektu

a scenare

A. vstup z klavesnice
B. cteni radku ze souboru

Pak

1A:Vyjimka musi byt specificka pro dany typ chyby. Je ji totiz nutno odchytit a poznat, zda se opravdu jedna o male pismeno. Kdyz ano, tak je potreba se uzivatele zpetat jak to myslel a zacit nove try{}. Kdyz ne, tak je potreba vyjimku nechat jit dale. Drive nebo pozdeji se pisalek kodu octne v siti vlastniho systemu vyjimek.


1B: v milionu vstupnich radek je 10% chyb. Program stotickrat absolbuje velmi citelnou rezii vyroby a chytani vyjimek.

2A: do{ prompt; get; if()break; tell_error};
2B: do{ get; if()process();};

Co se me tyce, tak me preference jsou jasne. Je ovsem pravda, ze kazdy je sveho osudu strujcem.

Zdravim

TC

Citovat příspěvek

 

Re: Podmíněný konstruktor

Autor: JardaJirava ♂

13:24:35 11.01.2013

Ahoj,

ve zminenem reseni vidim nasledujici problem. Vyvojar, potazmo uzivatel nepozna, kde je chyba. Beh programu bude obsahovat dalsi if - a po nem bude nasledovat co (vyhozeni vyjimky)?

Ano, pouziti factory pro vytvareni objektu je urcite vhodnym nastrojem.

Pekny den,

Citovat příspěvek

 

Re: Podmíněný konstruktor

Autor: TC ♂

8:43:37 11.01.2013

user252 napsal/a

Je možné vytvořit konstruktor, který kontroluje nějakou podmínku, a když není splněna objekt se nevytvoří.

Např.
public NejakaTrida(string Jmeno; int vek)
{
xy = Jmeno;
yx = vek;
}

Jméno musí začínat na velké písmeno, když ne objekt se nevytvoří,
Děkuji



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace user252
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(NejakaTrida.Try("tonda",2)!=null);
Console.WriteLine(NejakaTrida.Try("Kreten",2)!=null);
}
}
public class NejakaTrida
{
string xy;
int yx;
//public NejakaTrida(string Jmeno; int vek) This does not compile
bool isValid { get { return xy.Length > 0 && char.IsUpper(xy[0]) && yx > 0 && yx < 2000; } }
NejakaTrida(string Jmeno, int vek)
{
xy = Jmeno;
yx = vek;
}
static public NejakaTrida Try(string Jmeno, int vek)
{
var nt = new NejakaTrida(Jmeno, vek);
return nt.isValid ? nt : null;
}
}
}
Zdravim

TC

Citovat příspěvek

 

Re: Podmíněný konstruktor

Autor: TC ♂

21:51:55 10.01.2013

user252 napsal/a

A jak se on výjimka vytváří ?


throw new Exception ...

Ale neni to moudre. Lepsi je kdyz objekt ma priznak platnosti.

Zdravim

TC

Citovat příspěvek

 

Re: Podmíněný konstruktor

Autor: user252 ♂

18:56:00 10.01.2013

A jak se on výjimka vytváří ?

Citovat příspěvek

 

Re: Podmíněný konstruktor

Autor: JardaJirava ♂

18:47:07 10.01.2013

Ahoj,

je mozne vyhodit vyjimku v konstruktoru a tim padem se objekt nevytvori.

Pekny den,

Citovat příspěvek

 

Podmíněný konstruktor

Autor: user252 ♂

16:24:00 10.01.2013

Je možné vytvořit konstruktor, který kontroluje nějakou podmínku, a když není splněna objekt se nevytvoří.

Např.
public NejakaTrida(string Jmeno; int vek)
{
xy = Jmeno;
yx = vek;
}

Jméno musí začínat na velké písmeno, když ne objekt se nevytvoří,
Děkuji

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: