V navaznosti na diskuzi "prochazet pole odzadu ci odpredu" si dovoluji
nabidnout skript pro refaktorovaci framework RefactoringNG, pomoci nehoz
muzete snadno zmenit

for (int i = p.length - 1; i >= 0; i--) { ... }

na

for (int i = 0; i < p.length; i++) { ... }

Je to trosku delsi, nicmene verim, ze pri minimalni znalosti vnitrni formy
stale citelne:

// RNG script
// for (int i = p.length - 1; i >= 0; i--) { }
// ->
// for (int i = 0; i < p.length; i++) { }
ForLoop {
    List<Statement> {
        Variable [id: i] {
            Modifiers [id: m],
            PrimitiveType [primitiveTypeKind: INT],
            Binary [kind: MINUS] {
                MemberSelect [identifier: "length"] {
                    Identifier [id: p]
                },
                Literal [kind: INT_LITERAL, value: 1]
            }
        }
    },
    Binary [kind: GREATER_THAN_EQUAL] {
        Identifier [id: i2],
        Literal [kind: INT_LITERAL, value: 0]
    },
    List<ExpressionStatement> {
        ExpressionStatement {
            Unary [kind: POSTFIX_DECREMENT | PREFIX_DECREMENT] {
                Identifier [id: i3]
            }
        }
    },
    Statement [id: body]
} ->
ForLoop {
    List<Statement> {
        Variable [name: i#name] {
            Modifiers [ref: m],
            PrimitiveType [primitiveTypeKind: INT],
            Literal [kind: INT_LITERAL, value: 0]
        }
    },
    Binary [kind: LESS_THAN] {
        Identifier [name: i2#name],
        MemberSelect [identifier: "length"] {
            Identifier [ref: p]
        }
    },
    List<ExpressionStatement> {
        ExpressionStatement {
            Unary [kind: POSTFIX_INCREMENT] {
                Identifier [name: i3#name]
            }
        }
    },
    Statement [ref: body]
}

Z.T.
-- 
Zdenek Tronicek
FIT CTU in Prague


Oto Buchta napsal(a):
> JSR166 je podle mne také jeden z důvodů, proč se aplikace
> distribuovaně nepíší. Použil někdy někdo z Vás balík
> java.util.concurrent? A pokud ano, používáte to běžně?
> ConcurrentHashMap je dobrá a často ji používám, uznávám, ale jinak?
> Proč je vytvořen opravdu silný a IMHO složitý a těžko čitelný
> mechanismus pro paralelizaci a konkurentní přístup místo jednoduché
> konstrukce zavedené přímo do syntaxe jazyka?
> Proč se nikdo neinspiroval třeba takovými jazyky, jako jsou Oz, Alice či
> E?
>
> Jak by se krásně programovalo a paralelizovalo pri konstrukci jako
>
> int result1,result2,result3;
> concurrent {
>     thread 1: result1 = method1();
>     thread 2: result2 = method2();
>     thread 3: result3 = method1()*method2();
> }
> if (result1==result2) {
>  ...
> }
>
> , proč k tomu používat šílené Future? Nebo by to šlo krásně vyřešit
> pomocí anotace - jak by bylo jednoduché a elegantní přidat anotaci
> @Future k metodě? A nebo zavést Ečkové eventuální volání metody
> myObject<-futureMethod()
>
> a nebo rovnou Ečkový slib
>
> int futureResult <- myObject.futureMethod()
> when (futureResult) {
>    if (futureResult == 4) {
>       ...
>    }
> }
>
> Věřím tomu, že většina programátorů by tyto jednoduché konstrukce
> velice ráda a často využívala. A paralelizovaný kód by byl daleko
> čitelnější. Jednu dobu jsem uvažoval, že bych si zkusil napsat něco,
> co by to nějak inteligentně schovalo. Ale nakonec jsem to zavrhl...
> Třeba to v Javě 1.10 bude...
>
> PS:  Od dob foreach používám reverzní procházení pole jenom v J2ME a
> všichni, kteří kdy takovýto kód četli,
> velice rychle zjistili, že je to moje úchylka :-P
>
> --
> Oto 'tapik' Buchta, ta...@buchtovi.cz, http://tapikuv.blogspot.com
>

Odpovedet emailem