/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
"collapsable" textarea
Fra : Martin Schou


Dato : 12-05-01 01:33

Hører sikkert ikke til her ... men hvad fanden

I har sikkert prøvet det ... man har en MEEEEEEEEEEEEEEGET lang metode,
blandt andet fordi den indeholder 125 if/else, 76 case, 112 while, 22
for( ... ) og så videre (overdrivelse fremmer forståelsen).

Jeg ville (næsten) give min højre arm for en IDE med et collapsable
textarea – men hvad vil det lige sige?

Forestil dig at editoren kunne "folde" {} sammen:

Før:

private void isProxy()
{
/*Sæt "alle andre" tods med isProxy = true til isProxy = false*/
String Tabel = "TODSListe";
String[][] opdaterParametre = new String[][]{{ Tabel +
".isProxy","false"}};
String[][] opdaterKriterier = new String[][]{{ null, Tabel +
".isProxy", "=", "true"}};
try
{
System.out.println( DBProxy );
DBProxy.Opdater( Tabel, opdaterParametre, opdaterKriterier );
}
catch( Exception e )
{
e.printStackTrace();
}
/*Sæt "alle" TODS-entries med samme addresse som denne til isProxy =
true*/
opdaterParametre = new String[][]{{ Tabel + ".isProxy", "true" }};
opdaterKriterier = new String[][]{{ null, Tabel + ".Adresse", "=",
"'" + NetProxy.getIP() + "'"}};
try
{
DBProxy.Opdater( Tabel, opdaterParametre, opdaterKriterier );
}
catch( Exception e )
{
e.printStackTrace();
}

String[] Tabeller = new String[]{"TODSListe"};
String[][] søgeParametre = new String[][]{{ null , Tabeller[0] +
".Adresse", "=", "'" + NetProxy.getIP() + "'" , null}};
try
{
TabelObjekt ListeMedOsSelv = DBProxy.Søg( Tabeller, søgeParametre
, null );
String[][] recordSet = ListeMedOsSelv.getRecordSet();
if( recordSet.length == 0 ) //Vores server findes ikke i
databasen.
{
String[][] opretParametre = new String[][]
{
{"Adresse","'" + NetProxy.getIP() + "'"},
{"Port","" + NetProxy.getPort() + ""},
{"KeepAliveTime", "" + (
System.currentTimeMillis()/60000 /*millisekunder per minut*/ )},
{"isProxy","true"},
};
try
{
DBProxy.Opret( Tabel, opretParametre );
}
catch( Exception e )
{
e.printStackTrace();
}
}
}
catch( Exception e )
{
e.printStackTrace();
}

TilgåDBForListeMedTODS();
TabelObjekt TodsListe = TODSListe;;
if ( TodsListe != null )
{
NyProxy kommandoObjekt = new NyProxy( NetProxy.getIP(),
NetProxy.getPort() );
String[] resultat;
String[] feltNavne = TodsListe.getTabelFeltNavne();
int adresseIndex = 0;
int portIndex = 0;
boolean adresseIndexFundet = false;
boolean portIndexFundet = false;
while( (resultat = TodsListe.next() ) != null )//ninja-kode!!!
{
if ( !adresseIndexFundet )
{
while ( !feltNavne[adresseIndex].equalsIgnoreCase(
"TODSListe.Adresse" ) )
{
adresseIndex++;
}
adresseIndexFundet = true;
}
if ( !portIndexFundet )
{
while ( !feltNavne[portIndex].equalsIgnoreCase(
"TODSListe.Port" ) && !portIndexFundet )
{
portIndex++;
}
portIndexFundet = true;
}
if ( !resultat[adresseIndex].equalsIgnoreCase(
NetProxy.getIP() ) )
{
kommandoObjekt.setModtagerIP( resultat[adresseIndex] );
kommandoObjekt.setModtagerPort( Integer.parseInt(
resultat[portIndex] ) );
try
{
NetProxy.Send( kommandoObjekt );
}
catch( CreationException e )
{
String SletTabel = "TODSListe";
String[][] sletParametre = new String[][]
{
{ null, "Adresse", "=", "'" +
resultat[adresseIndex] + "'"},
{ "AND", "Port", "=", resultat[portIndex] }
};
try
{
DBProxy.Slet( SletTabel, sletParametre );
}
catch( SQLStatementException ignore )
{
}
}
}
}
}
Tabeller = new String[]{"IFSListe"};
TabelObjekt InfostanderListe = null;
try
{
InfostanderListe = DBProxy.Søg(Tabeller, null, null );
if ( InfostanderListe != null )
{
NyProxy kommandoObjekt = new NyProxy( NetProxy.getIP(),
NetProxy.getPort() );
String[] resultat;
String[] feltNavne = InfostanderListe.getTabelFeltNavne();
int adresseIndex = 0;
int portIndex = 0;
boolean adresseIndexFundet = false;
boolean portIndexFundet = false;
while( (resultat = InfostanderListe.next() ) != null
)//ninja-kode!!!
{
if ( !adresseIndexFundet )
{
while ( !feltNavne[adresseIndex].equalsIgnoreCase(
"IFSListe.Adresse" ) )
{
adresseIndex++;
}
adresseIndexFundet = true;
}
if ( !portIndexFundet )
{
while ( !feltNavne[portIndex].equalsIgnoreCase(
"IFSListe.Port" ) && !portIndexFundet )
{
portIndex++;
}
portIndexFundet = true;
}
kommandoObjekt.setModtagerIP( resultat[adresseIndex] );
kommandoObjekt.setModtagerPort( Integer.parseInt(
resultat[portIndex] ) );
try
{
NetProxy.Send( kommandoObjekt );
}
catch( CreationException e )
{
String SletTabel = Tabeller[0];
String[][] sletParametre = new String[][]
{
{ null, "Adresse", "=", "'" +
resultat[adresseIndex] + "'"},
{ "AND", "Port", "=", resultat[portIndex] }
};
try
{
DBProxy.Slet( SletTabel, sletParametre );
}
catch( SQLStatementException ignore )
{
}
}
}
}
}
catch( SQLStatementException e )
{
e.printStackTrace();
}
} // linje 175

Efter:

private void isProxy()
{
/*Sæt "alle andre" tods med isProxy = true til isProxy = false*/
String Tabel = "TODSListe";
String[][] opdaterParametre = new String[][]{{ Tabel +
".isProxy","false"}};
String[][] opdaterKriterier = new String[][]{{ null, Tabel +
".isProxy", "=", "true"}};
try
[+] { ... }
catch( Exception e )
[+] { ... }
/*Sæt "alle" TODS-entries med samme addresse som denne til isProxy =
true*/
opdaterParametre = new String[][]{{ Tabel + ".isProxy", "true" }};
opdaterKriterier = new String[][]{{ null, Tabel + ".Adresse", "=",
"'" + NetProxy.getIP() + "'"}};
try
[+] { ... }
catch( Exception e )
[+] { ... }

String[] Tabeller = new String[]{"TODSListe"};
String[][] søgeParametre = new String[][]{{ null , Tabeller[0] +
".Adresse", "=", "'" + NetProxy.getIP() + "'" , null}};
try
[+] { ... }
catch( Exception e )
[+] { ... }

TilgåDBForListeMedTODS();
TabelObjekt TodsListe = TODSListe;;
if ( TodsListe != null )
[+] { ... }
Tabeller = new String[]{"IFSListe"};
TabelObjekt InfostanderListe = null;
try
{
InfostanderListe = DBProxy.Søg(Tabeller, null, null );
if ( InfostanderListe != null )
{
NyProxy kommandoObjekt = new NyProxy( NetProxy.getIP(),
NetProxy.getPort() );
String[] resultat;
String[] feltNavne = InfostanderListe.getTabelFeltNavne();
int adresseIndex = 0;
int portIndex = 0;
boolean adresseIndexFundet = false;
boolean portIndexFundet = false;
while( (resultat = InfostanderListe.next() ) != null
)//ninja-kode!!!
{
if ( !adresseIndexFundet )
[+] { ... }
if ( !portIndexFundet )
[+] { ... }
kommandoObjekt.setModtagerIP( resultat[adresseIndex] );
kommandoObjekt.setModtagerPort( Integer.parseInt(
resultat[portIndex] ) );
try
[+] { ... }
catch( CreationException e )
[+] { ... }
}
}
}
catch( SQLStatementException e )
[+] { ... }
} // linje 61

Ja – det var en del tekst, men det er faktisk en reel metode :-/ ...
klassen er 746 linjer, hvilket gør det "umuligt" at finde ordentligt
rundt i den ...

Tilbage til spørgsmålet – kender du til en IDE, som har den funktion
(eller noget der ligner)?

(Jeg ved godt, at man "bare" kan lave nogle flere og simplere klasser –
men det er for så vidt sagen uvedkommende)

/Hektor

 
 
Ulrik Magnusson (12-05-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 12-05-01 01:47

Martin Schou wrote:


> Ja – det var en del tekst, men det er faktisk en reel metode :-/ ...
> klassen er 746 linjer, hvilket gør det "umuligt" at finde ordentligt
> rundt i den ...
> Tilbage til spørgsmålet – kender du til en IDE, som har den funktion
> (eller noget der ligner)?

Jeg vil såmænd bare sige at du bør koge det ned til 10 linier, som bliver til
2,
eller noget i den retning - dit eksempel gider jeg simpelthen ikke at læse,
og
jeg aner derfor ikke, hvad du mener.

> (Jeg ved godt, at man "bare" kan lave nogle flere og simplere klasser –
> men det er for så vidt sagen uvedkommende)

Nej, det er programmørens arbejde.

Ulrik Magnusson


--
"our hope's with you
rider in the blue"
Mike Oldfield - "Five Miles Out", do 1981
Visit my home page: http://www.geocities.com/ulrikm



Martin Schou (12-05-2001)
Kommentar
Fra : Martin Schou


Dato : 12-05-01 02:08

> Jeg vil såmænd bare sige at du bør koge det ned til 10 linier, som bliver
til
> 2,
> eller noget i den retning - dit eksempel gider jeg simpelthen ikke at
læse,
> og
> jeg aner derfor ikke, hvad du mener.

Folk er sgu også så krævende ... hehe

før:

public void Noget()
{
for( noget )
{
while( noget andet )
{
statement1();
statement2();
statement3();
statement4();
statement5();
statement6();
statement7();
}
}
}

efter:

public void Noget()
{
for( noget )
{
while( noget andet )
[+] { ... }
}
}

Hjalp det?

/Hektor

Ulrik Magnusson (12-05-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 12-05-01 02:08

Martin Schou wrote:

> før:
> {
> statement1();
> statement2();
> }

[snip]

> efter:
> [+] { ... }

ARGH! Du mener at din IDE skal skjule noget kode for dig? Det
synes jeg slet ikke om, og jeg har aldrig set den funktionalitet (hvilket
dog ikke siger så meget, så jeg holder bare min kæft..)

Ulrik Magnusson

--
"our hope's with you
rider in the blue"
Mike Oldfield - "Five Miles Out", do 1981
Visit my home page: http://www.geocities.com/ulrikm



Martin Schou (12-05-2001)
Kommentar
Fra : Martin Schou


Dato : 12-05-01 02:35

> ARGH! Du mener at din IDE skal skjule noget kode for dig?

Ja ... men kun når jeg beder den om det. Den skal sgu ikke gøre det på må
og få. Ligesom at sætte farver på koden, så den bliver mere overskuelig,
eller sørge for dele af min formatering.

> Det
> synes jeg slet ikke om, og jeg har aldrig set den funktionalitet (hvilket
> dog ikke siger så meget, så jeg holder bare min kæft..)

LOL! Hver mand sin smag. Personligt foretrækker jeg smukke rødhårede
kvinder med grønne øjne, men det betyder ikke, at du ikke må foretrække
blondiner med blå øjne, eller hvad du nu end foretrækker

/Hektor

Ulrik Magnusson (12-05-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 12-05-01 02:38

Martin Schou wrote:

> > ARGH! Du mener at din IDE skal skjule noget kode for dig?
> Ja ... men kun når jeg beder den om det. Den skal sgu ikke gøre det på må
> og få. Ligesom at sætte farver på koden, så den bliver mere overskuelig,
> eller sørge for dele af min formatering.

Problemet er jo, at der er andre end dig, der skal læse det, og dermed skulle
man indføre en standardiseret kommentering eller lign. omkring "kollaps" og
det mener jeg allerede er gjort med metode-abstraktionen.

Ulrik Magnusson

--
"Patriotism is the virtue of the vicious"
Oscar Wilde
Visit my home page: http://www.geocities.com/ulrikm



Martin Schou (12-05-2001)
Kommentar
Fra : Martin Schou


Dato : 12-05-01 02:42

> Problemet er jo, at der er andre end dig, der skal læse det, og dermed
skulle
> man indføre en standardiseret kommentering eller lign. omkring "kollaps"
og
> det mener jeg allerede er gjort med metode-abstraktionen.

Du misforstår mig en smule. Hvis du sætter din IDE til at farve
reserverede ord (int, float osv) grønne, bliver det jo ikke grønne i min
IDE. Kollapset skal ikke gemmes i koden, men blot på skærmbilledet.

Hmm ... tænk lidt på træ-strukturen i din fil-browser ... hvis du folder
din program-folder sammen, så sletter du jo ikke indholdet af folderen –
det giver dig bare et meget bedre overblik over indholdet af din(e)
harddisk(e).

/Hektor

Ulrik Magnusson (12-05-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 12-05-01 02:47

Martin Schou wrote:

> Hmm ... tænk lidt på træ-strukturen i din fil-browser ... hvis du folder
> din program-folder sammen, så sletter du jo ikke indholdet af folderen –
> det giver dig bare et meget bedre overblik over indholdet af din(e)
> harddisk(e).

Ja, men det vil jo nærmest opfordre folk til at lave meterlange metoder,
så jeg vil da ærgre mig, hvis der eksisterer en IDE, som kan gøre det.
Det gode ved "max 1 skærm pr metode" er jo netop at folk normalt
kommenterer hele metoder, eller i hvert fald giver dem et rimeligt navn,
sådan at andre kan finde rundt i koden. Kroppen af en metode føler _jeg_
i hvert fald at der er mindre grund til at kommentere end en hel metode.

Ulrik Magnusson


--
"Patriotism is the virtue of the vicious"
Oscar Wilde
Visit my home page: http://www.geocities.com/ulrikm



Martin Schou (12-05-2001)
Kommentar
Fra : Martin Schou


Dato : 12-05-01 02:54

> Ja, men det vil jo nærmest opfordre folk til at lave meterlange metoder,
> så jeg vil da ærgre mig, hvis der eksisterer en IDE, som kan gøre det.
> Det gode ved "max 1 skærm pr metode" er jo netop at folk normalt
> kommenterer hele metoder, eller i hvert fald giver dem et rimeligt navn,
> sådan at andre kan finde rundt i koden. Kroppen af en metode føler _jeg_
> i hvert fald at der er mindre grund til at kommentere end en hel metode.

Tjaa ... men det sker at nogle kører 1600x1200 og andre kører 800x600 ...

Tillad mig lige at stille et spørgsmål:
Hvis du nu SKAL lave et tjek på hver enkelt ascii-kode i en metode (lad
os sige at du laver en keylistener af en art) ... hvordan vil du holde
det på et enkelt skærmbillede?

Hvis du nu skal lave forskellige ting ved hvert enkelt ascii-kode, kan
jeg ikke se hvordan, man får det under hvad ... 256 linjer (mindst). Plus
de metoder som skal håndterer dem, hvilket er 256 flere.

Og eftersom man jo selvfølgelig har samme ansvarsområder liggende i samme
klasse, er klassen også en actionListener, windowListener, og lad os lige
lave den en Observer (så du ikke kan extende windowAdapter) ...

/Hektor – fører en religionskrig mod Ulrik

Ulrik Magnusson (12-05-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 12-05-01 03:12

Martin Schou wrote:

> > Ja, men det vil jo nærmest opfordre folk til at lave meterlange metoder,
> > så jeg vil da ærgre mig, hvis der eksisterer en IDE, som kan gøre det.
> > Det gode ved "max 1 skærm pr metode" er jo netop at folk normalt
> > kommenterer hele metoder, eller i hvert fald giver dem et rimeligt navn,
> > sådan at andre kan finde rundt i koden. Kroppen af en metode føler _jeg_
> > i hvert fald at der er mindre grund til at kommentere end en hel metode.
>
> Tjaa ... men det sker at nogle kører 1600x1200 og andre kører 800x600 ...

Det er en smule bevidst at jeg skriver "1 skærm", da jeg ikke har fundet en
absolut grænse.

> Tillad mig lige at stille et spørgsmål:
> Hvis du nu SKAL lave et tjek på hver enkelt ascii-kode i en metode (lad
> os sige at du laver en keylistener af en art) ... hvordan vil du holde
> det på et enkelt skærmbillede?
>
> Hvis du nu skal lave forskellige ting ved hvert enkelt ascii-kode, kan
> jeg ikke se hvordan, man får det under hvad ... 256 linjer (mindst). Plus
> de metoder som skal håndterer dem, hvilket er 256 flere.

interpret1to10( .. )
{}
interpret11to20( .. )
{}

det kan sagtens _lade sig gøre_. Dette er et meget specielt tilfælde, men
hvad med at gruppere ascii koderne - der er garanteret nogle overlap i
behandlingen. Fx skal "blanktegn" normalt håndteres på samme måde
og A er altså bare en variation af A. Alligevel vil man ende med en struktur,
der siger
if
else if
else if
else if

og prøv at indsætte kommentarer i ovenstående - så vil du nok se,
at et "kollaps" af blokke ikke vil gøre nogen nytte alligevel.

Jeg skrev også, at det var en _tommelfingerregel_, og der vil nok altid være
en
del af ens program, som ikke overholder standarden - denne er dog _meget_
struktureret og består normalt af et stor switch eller en bunke if-else med
et par linier hver - det er ikke
if-try-try-metodekald-catch-try.catch-catch-elseif-else-try-catch etc

Ulrik Magnusson

--
"Patriotism is the virtue of the vicious"
Oscar Wilde
Visit my home page: http://www.geocities.com/ulrikm



Martin Schou (12-05-2001)
Kommentar
Fra : Martin Schou


Dato : 12-05-01 03:31

[snip – Ulrik er dygtigere end mig]

Det der irriterer mig en kende er, at du på ingen måde ønsker at se
potentialet i at kunne kollapse kode sammen. Med risiko for at starte en
flame-war – jeg har en mistanke om, at du også er imod at IDE'er er
istand til at sætte farver på kode, fordi det gør koden mere overskuelig.

Eftersom java ikke ligefrem er det hurtigste sprog, der findes, er det
vel også relevant at tænke på performance. Hvis jeg ikke tager fejl
(underligt nok), så er det langsommere at kalde interne metoder, end det
er at udføre koden på stedet:

....
private void noget()
{
int index = 27:
index * 47;
int blah = index % 7;
}
....

burde være hurtigere end
....
private void noget()
{
int index = 27:
blah(index, 7 )
}
private void blah( int talEt, int talTo )
{
talEt * 47;
int blah = talEt % talTo;
}
....
(ikke fordi metoderne kan noget brugbart, men det er ikke pointen).

Der er heller ingen, der siger, at det absolut KUN skal være {}, der kan
kollapses – det kunne være blokke af tekst, så man for eksempel kunne
kollapse

private void noget()
{
int index = 27:
blah(index, 7 )
}
private void blah( int talEt, int talTo )
{
talEt * 47;
int blah = talEt % talTo;
}

sammen til

private void noget()
{
int index = 27:
[+] ...
int blah = talEt % talTo;
}

hvis man absolut ville

Ulrik Magnusson (12-05-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 12-05-01 03:43

Jeg skulle ligfe have noget aftensmad

Martin Schou wrote:

> [snip – Ulrik er dygtigere end mig]

Tak! (og dog - baseret på hvad?)

> Det der irriterer mig en kende er, at du på ingen måde ønsker at se
> potentialet i at kunne kollapse kode sammen.

Jeg kan godt se, at det er meget brugeligt (specielt til noget af min private

kode ) - jeg tror bare, at det vil medføre dårlige vaner hos programmører.

> Med risiko for at starte en
> flame-war – jeg har en mistanke om, at du også er imod at IDE'er er
> istand til at sætte farver på kode, fordi det gør koden mere overskuelig.

Nej, det er jeg _absolut_ ikke modstander af - det øger produktiviteten
og overskueligheden (hønen og ægget).

> Eftersom java ikke ligefrem er det hurtigste sprog, der findes, er det
> vel også relevant at tænke på performance. Hvis jeg ikke tager fejl
> (underligt nok), så er det langsommere at kalde interne metoder, end det
> er at udføre koden på stedet:

Det giver jo klart hurtigere programmer at inline alting manuelt, men du
har nok fundet ud af at jeg ikke tænker på effektivitet som "hvor hurtigt
kører programmet", men nærmere som "hvor hurtigt kan vi udvikle et
program der faktisk virker".

Ulrik Magnusson

--
"Patriotism is the virtue of the vicious"
Oscar Wilde
Visit my home page: http://www.geocities.com/ulrikm



Martin Schou (12-05-2001)
Kommentar
Fra : Martin Schou


Dato : 12-05-01 04:03

> Jeg skulle ligfe have noget aftensmad

lol

> > Det der irriterer mig en kende er, at du på ingen måde ønsker at se
> > potentialet i at kunne kollapse kode sammen.

> Jeg kan godt se, at det er meget brugeligt (specielt til noget af min
private
> kode ) - jeg tror bare, at det vil medføre dårlige vaner hos
programmører.

Det er for sent ... bare se Perl-programmører ...
"jeg kan lave en office-suite på 7 linjer!!!" (who really gives a
fuck???)

ALLE har dårlige vaner, når de starter på at programmerer. Du får ikke
gode vaner, blot fordi der er noget, som gør det svært at have dårlige
vaner (tag bare rygeforbud på arbejdspladserne).

Citatet: "Good judgment comes from bad experience, and a lot of that
comes from bad
judgment." passer i mine øjne ganske godt på vaner: "Good habbits comes
from bad experience, and a lot of that comes from bad habbits."

/Hektor

Ulrik Magnusson (12-05-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 12-05-01 04:12

Martin Schou wrote:

> > Jeg kan godt se, at det er meget brugeligt (specielt til noget af min
> private
> > kode ) - jeg tror bare, at det vil medføre dårlige vaner hos
> programmører.
>
> Det er for sent ... bare se Perl-programmører ...
> "jeg kan lave en office-suite på 7 linjer!!!" (who really gives a
> fuck???)

I don't. Perl stinker da for vildt! Men her synes jeg netop også at
sproget lægger op til det (siger han, som har lavet max 20 linier i
Perl..).

> ALLE har dårlige vaner, når de starter på at programmerer. Du får ikke
> gode vaner, blot fordi der er noget, som gør det svært at have dårlige
> vaner (tag bare rygeforbud på arbejdspladserne).

Der må vi så være uenige.

Ulrik Magnusson


--
"white trash picking up nazi flags
while you was gone, there was war
this is the west, get used to it
they put a swastika over the door"
Tin Machine - "under the god", Tin Machine 1989
Visit my home page: http://www.geocities.com/ulrikm



Jonas Kongslund (12-05-2001)
Kommentar
Fra : Jonas Kongslund


Dato : 12-05-01 10:46

Ulrik Magnusson wrote:
> I don't. Perl stinker da for vildt! Men her synes jeg netop også at
> sproget lægger op til det (siger han, som har lavet max 20 linier i
> Perl..).

Perl er imho ikke velegnet til større projekter, men der findes da folk
rundt omkring som har skrevet 20000-linjers Perl-programmer.

Hvert sprog har sine forcer, og Perls oprindelige nr. 1 force er
strengbehandling. Blev jeg bedt om at skrive et program, som skulle
manipulere fem specifikke 3Mb tekstdokumenter på en eller anden måde, så
ville jeg højst sandsynligt bruge et sprog i stil med Perl og ikke Java
- ene og alene pga. udviklingstiden. At programmet så måske bliver 7
gange så langsomt o.l. er jeg ligeglad med, da det kun skal behandle fem
specifikke tekstdokumenter og derefter kasseres.

--
Jonas Kongslund, http://kongslund.dk

Soren 'Disky' Reinke (12-05-2001)
Kommentar
Fra : Soren 'Disky' Reinke


Dato : 12-05-01 11:17


> > I don't. Perl stinker da for vildt! Men her synes jeg netop også at
> > sproget lægger op til det (siger han, som har lavet max 20 linier i
> > Perl..).
>
> Perl er imho ikke velegnet til større projekter, men der findes da folk
> rundt omkring som har skrevet 20000-linjers Perl-programmer.
>
> Hvert sprog har sine forcer, og Perls oprindelige nr. 1 force er
> strengbehandling. Blev jeg bedt om at skrive et program, som skulle
> manipulere fem specifikke 3Mb tekstdokumenter på en eller anden måde, så
> ville jeg højst sandsynligt bruge et sprog i stil med Perl og ikke Java
> - ene og alene pga. udviklingstiden. At programmet så måske bliver 7

Hvorfor mener du perl og lign. er hurtigere at udvikle end Java ?

> gange så langsomt o.l. er jeg ligeglad med, da det kun skal behandle fem
> specifikke tekstdokumenter og derefter kasseres.

--
With many Thanks

Soren ' Disky ' Reinke ICQ #1413069 http://www.disky-design.dk/fishj
Remove IHSYD from email address when replying by email





Jonas Kongslund (12-05-2001)
Kommentar
Fra : Jonas Kongslund


Dato : 12-05-01 18:27

Soren 'Disky' Reinke wrote:
> > Hvert sprog har sine forcer, og Perls oprindelige nr. 1 force er
> > strengbehandling. Blev jeg bedt om at skrive et program, som skulle
> > manipulere fem specifikke 3Mb tekstdokumenter på en eller anden måde, så
> > ville jeg højst sandsynligt bruge et sprog i stil med Perl og ikke Java
> > - ene og alene pga. udviklingstiden. At programmet så måske bliver 7
>
> Hvorfor mener du perl og lign. er hurtigere at udvikle end Java ?

Fordi Perl i modsætning til Java har en masse sprogkonstruktioner, som
er velegnet til strengmanipulation. Dette betyder mindre kodetid, og til
visse opgavetyper (som f.eks. ovenstående) er Perl derfor et bedre valg.

Ligeledes vil jeg også i visse situationer foretrække PHP frem for
JSP/Servlets til webbrug, da PHP simpelthen er konstrueret til dette
formål - i hvert fald så længe vi taler om små og mellemstore sites.

--
Jonas Kongslund, http://kongslund.dk

Jonas Kongslund (12-05-2001)
Kommentar
Fra : Jonas Kongslund


Dato : 12-05-01 10:37

Martin Schou wrote:

> Hvis jeg ikke tager fejl
> (underligt nok), så er det langsommere at kalde interne metoder, end det
> er at udføre koden på stedet:

Du har ret, men det er mikrosekunder vi taler om. Optimeringer af denne
art er først noget man medtager når programmet stort set er
færdigskrevet og enkelte kodeblokke viser sig at være flaskehalse.

Til gengæld ved du ikke, hvordan compileren har oversat koden for dig og
du ved heller ikke hvordan den virtuelle maskine fungerer.

Mange compilere er f.eks. i stand til at udføre inlining i visse
situationer, dvs. indlejre koden fra metoder inde i andre metoder
således nedenstående kodeblok

> private void noget()
> {
> int index = 27:
> blah(index, 7 )
> }
> private void blah( int talEt, int talTo )
> {
> talEt * 47;
> int blah = talEt % talTo;
> }

rent faktisk bliver til noget i stil med

> private void noget()
> {
> int index = 27:
> index * 47;
> int blah = index % 7;
> }

(Dem der har fulgt et compilerkursus må gerne uddybe)

Nyere virtuelle maskiner (f.eks. Hotspot) benytter sig desuden af
profileringsteknikker til at undersøge hvilke kodeblokke der ofte bliver
brugt. Bruges en metode meget så bliver den på runtime oversat til
maskinkode een gang for alle i den aktuelle programudførelse.

--
Jonas Kongslund, http://kongslund.dk

Esben Mose Hansen (14-05-2001)
Kommentar
Fra : Esben Mose Hansen


Dato : 14-05-01 17:33

Martin Schou wrote:

[klip]

DET kender jeg en editor der kan --- nemlig den medfølgende editor til
S/390, nu kendt som Z-OS Der kan man gemme alle de linjer man gider.
Man kan vist endda også få OS/390 til en PC.... Den er også genial
hvis man skal bruge 1000 kopier af en blok....

mvh. Esben

> Der er heller ingen, der siger, at det absolut KUN skal være {}, der kan
> kollapses - det kunne være blokke af tekst, så man for eksempel kunne
> kollapse
>
> private void noget()
> {
> int index = 27:
> blah(index, 7 )
> }
> private void blah( int talEt, int talTo )
> {
> talEt * 47;
> int blah = talEt % talTo;
> }
>
> sammen til
>
> private void noget()
> {
> int index = 27:
> [+] ...
> int blah = talEt % talTo;
> }
>
> hvis man absolut ville
>



Ulrik Magnusson (12-05-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 12-05-01 03:17

Martin Schou wrote:

> Hvis du nu skal lave forskellige ting ved hvert enkelt ascii-kode, kan
> jeg ikke se hvordan, man får det under hvad ... 256 linjer (mindst). Plus
> de metoder som skal håndterer dem, hvilket er 256 flere.

Her er i øvrigt et repræsentativt udsnit af en bytecode parser:

else if( mnemonic == 185 ) // InvokeInterface
{
instructionVector.addElement( InvokeInterface.parse( constantPool, input,
mnemonic, offset ) );
}
else if( mnemonic >= 172 && mnemonic <= 177 ) // Return
{
instructionVector.addElement( Return.parse( constantPool, input,
mnemonic, offset ) );
}

et "kollaps af blokke vil ikke gøre den store forskel her.

Ulrik Magnusson

--
"Patriotism is the virtue of the vicious"
Oscar Wilde
Visit my home page: http://www.geocities.com/ulrikm



Jonas Kongslund (12-05-2001)
Kommentar
Fra : Jonas Kongslund


Dato : 12-05-01 10:17

Ulrik Magnusson wrote:
> ARGH! Du mener at din IDE skal skjule noget kode for dig? Det
> synes jeg slet ikke om, og jeg har aldrig set den funktionalitet (hvilket
> dog ikke siger så meget, så jeg holder bare min kæft..)

Man kan høre du aldrig har arbejdet med BETA og Mjølner-systemet.

http://www.mjolner.com/mjolner-system/

Skærmbilleder m.m.:
http://www.mjolner.com/mjolner-system/documentation/mjolner-guided-tour/implementation.html#H3_1

--
Jonas Kongslund, http://kongslund.dk

Ulrik Magnusson (12-05-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 12-05-01 02:01

Martin Schou wrote:

> klassen er 746 linjer, hvilket gør det "umuligt" at finde ordentligt
> rundt i den ...

Du mener nok "metoden" - jeg tror, at tommelfingerreglen siger noget
med max 1000 linier pr klasse og at hver metode skal kunne ses på
skærmen i sin fulde udstrækning.

Det er så min egen holdning, at hvis disse krav ikke overholdes,
kan man ikke regne med at personen, der skrev koden, selv ved,
hvad der foregår. Det vil sige, at koden er ækvivalent med
pizzabakken i hjørnet, og så er det altså rengøringspersonalets ansvar.

Dermed _ikke_ sagt at jeg ikke selv kommer ud i den slags
shit en gang i mellem, men så ved man da at der er noget galt.

Ulrik Magnusson

--
"our hope's with you
rider in the blue"
Mike Oldfield - "Five Miles Out", do 1981
Visit my home page: http://www.geocities.com/ulrikm



Martin Schou (12-05-2001)
Kommentar
Fra : Martin Schou


Dato : 12-05-01 02:32

> > klassen er 746 linjer, hvilket gør det "umuligt" at finde ordentligt
> > rundt i den ...

> Du mener nok "metoden" - jeg tror, at tommelfingerreglen siger noget
> med max 1000 linier pr klasse og at hver metode skal kunne ses på
> skærmen i sin fulde udstrækning.

Nej, den klasse metoden isProxy() ligger i, er på 746 linjer.
Metoden isProxy er 175 linjer.

> Det er så min egen holdning, at hvis disse krav ikke overholdes,
> kan man ikke regne med at personen, der skrev koden, selv ved,
> hvad der foregår. Det vil sige, at koden er ækvivalent med
> pizzabakken i hjørnet, og så er det altså rengøringspersonalets ansvar.

Det er mig, som har skrevet det. Jeg ved hvad der foregår i klassen, og i
dets metoder – primært fordi jeg har en masse interaktionsdiagrammer til
at hjælpe mig

Første del består i at 'nulstille' databasens indhold, således at der
ikke er nogle entries hvor "isProxy"-feltet er 'true'

Anden del består i at sætte den entry, der indeholder maskinens IP, til
at have "isProxy"-feltet til 'true'. Hvis vores IP ikke findes i
databasen, så skal den lige tilføjes først.

Tredje del består i at give alle af een slags "klienter" besked om
ændringen.

Fjerde del består i at give alle af en anden slags "klienter" besked om
ændringen.

> Dermed _ikke_ sagt at jeg ikke selv kommer ud i den slags
> shit en gang i mellem, men så ved man da at der er noget galt.

Der er ikke noget galt – det _kunne_ bare have være delt op i 4 dele..

Men det ændrer ikke på, at det ville være rart at have muligheden for at
folde metoderne sammen.

/Hektor

Ulrik Magnusson (12-05-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 12-05-01 02:28

Martin Schou wrote:

> > Dermed _ikke_ sagt at jeg ikke selv kommer ud i den slags
> > shit en gang i mellem, men så ved man da at der er noget galt.
> Der er ikke noget galt – det _kunne_ bare have være delt op i 4 dele.

Det er altså dit job, vil jeg mene.

> Men det ændrer ikke på, at det ville være rart at have muligheden for at
> folde metoderne sammen.

Tror du også at ham, der skal vedligeholde koden, kan finde rundt i den?

Ulrik Magnusson

--
"Patriotism is the virtue of the vicious"
Oscar Wilde
Visit my home page: http://www.geocities.com/ulrikm



Ulrik Magnusson (12-05-2001)
Kommentar
Fra : Ulrik Magnusson


Dato : 12-05-01 02:35

--
"Patriotism is the virtue of the vicious"
Oscar Wilde
Visit my home page: http://www.geocities.com/ulrikm



Martin Schou (12-05-2001)
Kommentar
Fra : Martin Schou


Dato : 12-05-01 02:38

> Tror du også at ham, der skal vedligeholde koden, kan finde rundt i den?

Jeg besvarer principielt ikke på retoriske spørgsmål

Men uanset om min klasse består af 5 metoder á 130 linjer, eller 40
metoder á 16 linjer, ville jeg stadig gerne have muligheden for at folde
linjerne sammen.

Forresten – een af os har et ur, der ikke passer. Du svarer på mine
spørgsmål, inden jeg stiller dem ...

/Hektor

Martin Schou (12-05-2001)
Kommentar
Fra : Martin Schou


Dato : 12-05-01 02:39

> Forresten – een af os har et ur, der ikke passer. Du svarer på mine
> spørgsmål, inden jeg stiller dem ...

Havde ikke lige set din post.

Soren 'Disky' Reinke (12-05-2001)
Kommentar
Fra : Soren 'Disky' Reinke


Dato : 12-05-01 08:57


>"Martin Schou" <schou@mail.ikasths.dk> skrev i en meddelelse
news:20010512.324720@mis.configured.host...
>Hører sikkert ikke til her ... men hvad fanden

>I har sikkert prøvet det ... man har en MEEEEEEEEEEEEEEGET lang metode,
>blandt andet fordi den indeholder 125 if/else, 76 case, 112 while, 22
>for( ... ) og så videre (overdrivelse fremmer forståelsen).

Øh egentligt ikke.

>Jeg ville (næsten) give min højre arm for en IDE med et collapsable
>textarea - men hvad vil det lige sige?

>Forestil dig at editoren kunne "folde" {} sammen:

ja og ?

>Ja - det var en del tekst, men det er faktisk en reel metode :-/ ...
>klassen er 746 linjer, hvilket gør det "umuligt" at finde ordentligt
>rundt i den ...

Jeg må altså give Ulrik ret, du blvier nød til at indele din metode i flere
små metoder. Ellers er det helt klart synd for ham/hende der senere skal
rette fejl i din kode.

>Tilbage til spørgsmålet - kender du til en IDE, som har den funktion
>(eller noget der ligner)?

Nope, har aldrig haft brug for det.

>(Jeg ved godt, at man "bare" kan lave nogle flere og simplere klasser -
>men det er for så vidt sagen uvedkommende)

Din kommentar med metoderne/klasser er altså vejen frem, IMHO

--
With many Thanks

Soren ' Disky ' Reinke ICQ #1413069 http://www.disky-design.dk/fishj
Remove IHSYD from email address when replying by email








Canaech (12-05-2001)
Kommentar
Fra : Canaech


Dato : 12-05-01 14:35


"Martin Schou" <schou@mail.ikasths.dk> skrev i en meddelelse
news:20010512.324720@mis.configured.host...
Hører sikkert ikke til her ... men hvad fanden

I har sikkert prøvet det ... man har en MEEEEEEEEEEEEEEGET lang metode,
blandt andet fordi den indeholder 125 if/else, 76 case, 112 while, 22
for( ... ) og så videre (overdrivelse fremmer forståelsen).

Jeg ville (næsten) give min højre arm for en IDE med et collapsable
textarea - men hvad vil det lige sige?

Forestil dig at editoren kunne "folde" {} sammen:

Tilbage til spørgsmålet - kender du til en IDE, som har den funktion
(eller noget der ligner)?

(Jeg ved godt, at man "bare" kan lave nogle flere og simplere klasser -
men det er for så vidt sagen uvedkommende)

/Hektor

Det du søger findes allerede i andre sprog, desværre har jeg ikke set det i
JAVA.
F .eks. i sproget BETA frar fra Mjolner Systems (fra DK). De har et specielt
editor der kollapser kode mellem {}.

-F.eks.(dit eksempel kollapset vil se sådan ud):

private void isProxy()
{...} // linje 175


-Hvis nu du doble-klikker på {...} så vil den folde sig ud et {}-niveau. Som
følgende:

private void isProxy()
{
/*...*/
String Tabel = "TODSListe";
String[][] opdaterParametre = new String[][]{{ Tabel +
".isProxy","false"}};
String[][] opdaterKriterier = new String[][]{{ null, Tabel +
".isProxy", "=", "true"}};
try
{...}
catch( Exception e )
{...}
/*...*/
opdaterParametre = new String[][]{{ Tabel + ".isProxy", "true" }};
opdaterKriterier = new String[][]{{ null, Tabel + ".Adresse", "=",
"'" + NetProxy.getIP() + "'"}};
try
{...}
catch( Exception e )
{...}

String[] Tabeller = new String[]{"TODSListe"};
String[][] søgeParametre = new String[][]{{ null , Tabeller[0] +
".Adresse", "=", "'" + NetProxy.getIP() + "'" , null}};
try
{...}
catch( Exception e )
{...}

TilgåDBForListeMedTODS();
TabelObjekt TodsListe = TODSListe;;
if ( TodsListe != null )
{... }
Tabeller = new String[]{"IFSListe"};
TabelObjekt InfostanderListe = null;
try
{...}
catch( SQLStatementException e )
{...}
} // linje 175

Igen kan klikke på en {...} og så vil den del folde sig ud et niveau til.
Du kan kollapse teksten igen ved at doble-klikke på et "start-{" eller
"slut-}".
Det samme vil der gælde med kommentar, de kan kolapses uafhængigt af ordinær
kode.
Det er faktisk en af de bedste editors jeg har set (da den også kan en del
flere features), desværerre er den ikke til JAVA.

/Kenneth





Hans Kilian (12-05-2001)
Kommentar
Fra : Hans Kilian


Dato : 12-05-01 16:27

On Sat, 12 May 2001 00:32:47 GMT, Martin Schou <schou@mail.ikasths.dk>
wrote:

>Forestil dig at editoren kunne "folde" {} sammen:

ISPF, der er den fremherskende editor under TSO på mainframes har
kunnet exclude linier på præcist den måde, du gerne vil have, i
(mindst) de sidste 10 år.

Der findes også en klon til Windows (SPF/SE), der laves af Command
Technology på http://www.command-technology.com/, hvor du også kan
hente en demo.

Jeg vil dog tro, at den vil virke forholdsvis gammeldags på dig, men
kig selv efter.

Mvh. Hans

Martin Schou (13-05-2001)
Kommentar
Fra : Martin Schou


Dato : 13-05-01 14:12

Fundet .. FANDME!!!

http://www.elixirtech.com/ElixirIDE/index.html

"Collapsible code blocks for easy navigation"

Tak til (imponerende nok) Ulrik Magnusson for hans svar i "Re: class
filer?", da det ledte mig frem til sitet.

Ulrik - *pbhlbh*

/Hektor


Martin Mouritzen (18-05-2001)
Kommentar
Fra : Martin Mouritzen


Dato : 18-05-01 14:27

After I finished the 3 Pan Galactic Gargle Blasters, Martin Schou
<schou@mail.ikasths.dk> just offered me, he muttered some weird stuff,
and I had to correct this gibberish:

>Jeg ville (næsten) give min højre arm for en IDE med et collapsable
>textarea – men hvad vil det lige sige?

For 43925804395809534 penge får du at vide at UltraEdit 8.10a netop nu
har den funktion... Og at du kan downloade en 45 dages free trial på
www.ultraedit.com (Det er den editor jeg altid har brugt, og jeg må
indrømme jeg godt kan lide at den nu kan kollapse tekst).
--
Venlig hilsen / Best regards
Martin Mouritzen - martin@eisenstein.dk
Eisenstein - http://www.eisenstein.dk

Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste