Autor Téma: Máte pro tuto chybu logické vysvětlení?  (Přečteno 13892 krát)

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 6141
  • Karma: 44
    • Verze Delphi: W10 + D11
Re:Máte pro tuto chybu logické vysvětlení?
« Odpověď #60 kdy: 13-02-2013, 14:07:45 »
Snáď sa nemýlim. Tento problém sa dá riešiť aj udaním kvalifkovaného názvu. Myslím tým nazovjednotky.funkcia. Ale nejde to po podstate diskusie.
W10 64b, Delphi 10.4, FireBird 3.08
Expert na kladenie nejasne formulovaných otázok.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 3002
  • Karma: 108
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:Máte pro tuto chybu logické vysvětlení?
« Odpověď #61 kdy: 14-02-2013, 00:34:29 »
to age.new - nešlo by to trochu v klidu? Hodně lidí se ti snažilo pomoci a správně, takže by trochu slušnosti vážně neškodilo.

RightStr mám definován v jednotce IdGlobalProtocols někde v c:\Program Files (x86)\Embarcadero\RAD Studio\10.0\source\Indy10\

Navíc v "c:\Program Files (x86)\Embarcadero\RAD Studio\10.0\lib\win32\" a spol jsou předkompilované DCU soubory, které primárně v tomto případě Delphi používá.
Je možné, že nemáš nastaveny cesty k Indy zdrojákům, proto se z IDE nedostaneš ke zdrojákům kliknutím.
Embarcadero MVP - Czech republic

Offline JaroB

  • Guru
  • *****
  • Příspěvků: 1065
  • Karma: 29
    • Verze Delphi: XE8, Sydney
Re:Máte pro tuto chybu logické vysvětlení?
« Odpověď #62 kdy: 14-02-2013, 08:38:28 »
Schválně jsem se podíval, kde se všude nachází deklarace RightStr() v Delphi6. Je to deklarováno v Indy60 v jednotce IdGlobal.pas, ovšem také je to v jednotce Rtl\Common\StrUtils.pas. Ale je to taková basicová funkce, takže může být i v dalších jednotkách třetích stran, omylem zapomenutá v uses v nesprávném pořadí.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3336
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Máte pro tuto chybu logické vysvětlení?
« Odpověď #63 kdy: 14-02-2013, 10:35:42 »
Schválně jsem se podíval, kde se všude nachází deklarace RightStr() v Delphi6. Je to deklarováno v Indy60 v jednotce IdGlobal.pas, ovšem také je to v jednotce Rtl\Common\StrUtils.pas. Ale je to taková basicová funkce, takže může být i v dalších jednotkách třetích stran, omylem zapomenutá v uses v nesprávném pořadí.
Je prece jedno, kolikrat a kde se nachazi.

To, na co narazil, je prece celkem bezna lapalie, ktera patri do kazdodenni rutiny programatora a jeji vyreseni by melo pri spravnem postupu zabrat spis vteriny nez minuty... At uz v run-time, nebo nejakou administrativni metodou. Prece kdyz vim, ze mi to 1000x fungovalo a najednou prestalo, tak jedna z moznosti je review kodu tj. podivat se do change logu, co se kde menilo ev. si udelat diff. Me stale udivuje, jak pri dnesnich moznostech, kdy je k dispozici hafo kvalitnich nastroju zdarma, se najde nekdo, kdo je nepouziva, aby si usnadnil praci.

A IMHO konkretne tahle chyba nazorne ukazuje, jak jsou tisice bezprizornich standalone funkci, rozesetych po vsech certech, spatne udrzovatelne a proc moderni jazyky jsou plne objektove a pouzivaji namespacy.

Offline Mi.Chal.

  • Guru
  • *****
  • Příspěvků: 576
  • Karma: 25
Re:Máte pro tuto chybu logické vysvětlení?
« Odpověď #64 kdy: 14-02-2013, 12:37:54 »
A IMHO konkretne tahle chyba nazorne ukazuje, jak jsou tisice bezprizornich standalone funkci, rozesetych po vsech certech, spatne udrzovatelne a proc moderni jazyky jsou plne objektove a pouzivaji namespacy.

S tím plně objektové bych byl opatrný :-). Třeba podle stoupenců Smalltalku je plně objektový akorát ten (a možná ještě pár podobných jazyků/platforem), Java a spol jsou podle nich jenom nedokonalé náhražky a ne plně objektové.

Jinak namespacy a unity jsou podle mě celkem podobný mechanismus (pravda, do názvu unity předpokládám nešly dávat tečky a nemohly být tak dlouhé). Hlavní problém je tady na straně překladače - Delphi si vezmou první identifikátor, který najdou a nezajímá je, jestli není použit ještě někde jinde. Pokud v .Net budu mít stejný název typu v různých namespacech a budu je chtít použít v jednom zdrojáku, tak se to nepřeloží, pokud se u toho typu nespecifikuje plný namespace. Kdyby Delphi napsali, že ta funkce existuje v několika unitách a člověk si má vybrat, tak tenhle problém neexistuje.

Offline pf1957

  • Padawan
  • ******
  • Příspěvků: 3336
  • Karma: 139
    • Verze Delphi: D2007, XE3, DX10
Re:Máte pro tuto chybu logické vysvětlení?
« Odpověď #65 kdy: 14-02-2013, 12:59:39 »
S tím plně objektové bych byl opatrný :-).
Je pravda, ze Python taky neni z nejbezpecnejsich: tam kdyz se spletes s odkazes se na property, ktera neexistuje, tak on ti ji automaticky do toho objektu prida :-) (aspon se tak pred lety choval, a myslim, ze se stale chova, protoze to bylo prezentovano jako prednost)

Kdyby Delphi napsali, že ta funkce existuje v několika unitách a člověk si má vybrat, tak tenhle problém neexistuje.
Souhlas, stacil by hint