Odpověď na názor

Odpovídáte na názor ke článku Tvoříme "vláčky" nejen v C++.

  • 25. 1. 2012 14:34

    Ondřej Novák (neregistrovaný)

    Člověk by asi měl k tomuto sáhnout pokud jde o čitelnost kódu. Například v situaci, kdy C++ ještě nemá dobře řešené volitelné množství argumentů se dá tento problém obejít například pomocí řetězení nějaké metody, která argumenty dodává. Viz můj příklad s SQL. Nebo je to krásně vidět u spouštění procesu, kde se člověk jinak nazlobí s tvorbou command line a definováním vstupů a výstupů.

    @3 To je přesně ono, že tady už nejde o Fluent Interface, jedná se o konverzní řetěz. Něco podobného jsem tuhle vyrobil s MD5 třídou

    MD5_t().appen­d(login).appen­d(heslo).appen­d(salt).finish()­.asHexString()­.c_str()

    Nicméně zkuste to napsat jinak na jednu řádku.

    MD5toHex(MD5(login + heslo + salt));

    Mimochodem, vláček bude rychlejší, protože tam nebude zbytečná concatace řetězců.

    Někdy totiž rozpisování jednoho logického celku do více příkazů zavádí nepřehlednost, to pak je lepší sáhnout po samostatné funkci. Pokud se podaří provést zápis něčeho komplikovanější jako jeden příkaz, ušetří to práci, a nijak to nesnižuje čitelnost. Příklad s MD5_t jasně zobrazuje, že chceme vzít login,heslo,salt a udělat z toho MD5 v Hexa.

    Někdy použití vláčků může generovat efektivnější kód. Například u třídy Process v implementaci ve Windows přidávání argumentů jednoduše zapisuje argumenty do nějakého interního bufferu obsahující příkazovou řádku. V Linuxové verzi se tvoří pole řetězců. Pokud bych na rozhraní zadával argumenty polem, vyrobím sice efektivnější Linuxovou verzi, ale neefektivní Windows verzi. Pokud bych argumenty zadával řetězcem, ve Windows je to super, ale musel bych pro Linux verzi implementovat parser Windowsovské příkazové řádky.