Gå til innhold

Anbefalte innlegg

Videoannonse
Annonse
Like greit å lage en kombinert test slik drange skriver (så slipper du to nøstede if-tester), og bruke for-løkke. While er så tungvint i forhold.

7461838[/snapback]

 

Joda, kom bare med et eksempel. Skriver automatisk while i stedet for for av en eller annen grunn, men det er opp til den enkelt. Testklassen tok meg forøvrig ca. 10 minutter å skrive :thumbup:

 

Edit: etter en kjapp omskriving kan det også gjøres slik:

 

private int findSongPos(String songName, String artist){
    for (int i = 0; i < songList.length; i++){
        if(songList[i] == null){}
        else{
            if(artist.equals(songList[i].getArtist()) && songName.equals(songList[i].getTrackname())){
                return i;
               }
           }
       }
       return -1;
   }  

Endret av Thomas`
Lenke til kommentar
private int findSongPos(String songName, String artist){
    for (int i = 0; i < songList.length; i++){
        if(songList[i] == null){}
        else{
            if(artist.equals(songList[i].getArtist()) && songName.equals(songList[i].getTrackname())){
                return i;
               }
           }
       }
       return -1;
   }  

7461857[/snapback]

Du trenger ikke den tomme {}. Du kan like gjerne skrive
if (songList[i] != null)  if(artist.equals(songList[i].getArtist()) && songName.equals(songList[i].getTrackname())) return i;

Lenke til kommentar

Selvsagt drange, det blir en mye bedre syntaks enn en tom if. Er ikke helt våken enda, gitt ;)

 

Koden blir da forøvrig slik..

 

 private int findSongPos(String songName, String artist){
    for (int i = 0; i < songList.length; i++){
        if(songList[i] != null){
            if(artist.equals(songList[i].getArtist()) && songName.equals(songList[i].getTrackname())){
                return i;
               }
           }
       }
       return -1;
   } 

 

Du trenger jo ikke bracketene, kan jo skriva hele if-setningen på en linje som du nevnte, men har dem med for oversiktens skyld.

Endret av Thomas`
Lenke til kommentar

Hmm, finnes det noen 'god kode-standard'-opplegg som jeg ikke har fått med meg, siden alle skriver

artist.equals(songList[i].getArtist())

mens jeg skriver

songList[i].getArtist().equals(artist)

? :p

 

 

Uansett, jeg brukte equalsIgnoreCase også, for å gjøre hele søket litt mer fleksibelt. Sånn hvis man skulle hente inn input fra bruker og sånn, noe som ikke er helt fjernt.

Lenke til kommentar

Akkurat det der har jeg ikke noe svar på, det falt meg bare logisk inn å bruke variabel.equals(metode), ettersom du skrive jo variabel = metode, ikke metode = variabel :p Ja, funderte på å implentere litt flere funksjoner, men så lenge det ikke er snakk om input fra bruker gidder jeg ikke. Bruker toUpperCase() i test-programmet når jeg bruker removeAllByGenre().

 

Og litt OT, noen som vet sånn ca når vi får karakter på PJ110 prosjektet? Gjelder Stavanger :thumbup:

Endret av Thomas`
Lenke til kommentar
private int findSongPos(String songName, String artist){
    for (int i = 0; i < songList.length; i++){
        if(songList[i] == null){}
        else{
            if(artist.equals(songList[i].getArtist()) && songName.equals(songList[i].getTrackname())){
                return i;
               }
           }
       }
       return -1;
   }  

7461857[/snapback]

Du trenger ikke den tomme {}. Du kan like gjerne skrive
if (songList[i] != null)  if(artist.equals(songList[i].getArtist()) && songName.equals(songList[i].getTrackname())) return i;

7461967[/snapback]

Å utelate klammene fullstendig er ikke å anbefale. Gjør koden mindre oversiktelig.

Lenke til kommentar
Å utelate klammene fullstendig er ikke å anbefale. Gjør koden mindre oversiktelig.

Hvis du leser en gang til, ser du at det ikke var det han mente. Han mente heller å endre sjekken, og sjekke om posisjonen i arrayen er ulik 0 i if, og kutte ut else helt. :)

 

Regner med at klammene ble utelatt i eksempelet for enkelhets skyld, og om ikke funker det jo helt fint uansett.

Endret av Mr.Berg
Lenke til kommentar
Like greit å lage en kombinert test slik drange skriver (så slipper du to nøstede if-tester), og bruke for-løkke. While er så tungvint i forhold.

7461838[/snapback]

 

Joda, kom bare med et eksempel. Skriver automatisk while i stedet for for av en eller annen grunn, men det er opp til den enkelt. Testklassen tok meg forøvrig ca. 10 minutter å skrive :thumbup:

 

Edit: etter en kjapp omskriving kan det også gjøres slik:

 

private int findSongPos(String songName, String artist){
    for (int i = 0; i < songList.length; i++){
        if(songList[i] == null){}
        else{
            if(artist.equals(songList[i].getArtist()) && songName.equals(songList[i].getTrackname())){
                return i;
               }
           }
       }
       return -1;
   }  

7461857[/snapback]

 

Jeg hadde skrevet continue inne i de tomme klammene, forløkken vil da fortsette med neste iterasjon.

Lenke til kommentar
Eller bare bytte om og sjekke for ulikhet som skrevet over, siden else slett ikke er påkrevd. :)

7470602[/snapback]

Hehe, mange gode forslag. Vi kan lage en liste over mulige måter å bruke if/else-spørringer på uten om normalen etter denne tråden her. d-_-b
Lenke til kommentar
Å utelate klammene fullstendig er ikke å anbefale. Gjør koden mindre oversiktelig.

Hvis du leser en gang til, ser du at det ikke var det han mente. Han mente heller å endre sjekken, og sjekke om posisjonen i arrayen er ulik 0 i if, og kutte ut else helt. :)

 

Regner med at klammene ble utelatt i eksempelet for enkelhets skyld, og om ikke funker det jo helt fint uansett.

7469219[/snapback]

Jeg saa hva han mente, og jeg er enig i endringene han gjorde. Tenkte jeg kunne paapeke aa selv om det er mulig aa skrive if-setninger uten klammer, saa er det god kodeskikk aa alltid bruke klammer paa slike statements (if/else/for/while).

Lenke til kommentar

Ja, det er for så vidt greit. Nå har jeg ikke skrevet mye Java, men av disse tre, finner jeg førstnevnte mest oversiktlig:

if (obj != null) return i;

if (obj != null) { return i; }

if (obj != null) {
  return i;
}

Men jeg kan gå med på at sistnevnte bør brukes ettersom det er de facto standard.

Lenke til kommentar

Java code convention:

http://java.sun.com/docs/codeconv/

 

http://java.sun.com/docs/codeconv/html/Cod...s.doc6.html#430

7.2 Compound Statements

 

Compound statements are statements that contain lists of statements enclosed in braces "{ statements }". See the following sections for examples.

 

* The enclosed statements should be indented one more level than the compound statement.

* The opening brace should be at the end of the line that begins the compound statement; the closing brace should begin a line and be indented to the beginning of the compound statement.

* Braces are used around all statements, even single statements, when they are part of a control structure, such as a if-else or for statement. This makes it easier to add statements without accidentally introducing bugs due to forgetting to add braces.

 

Vil si at sun er relativt klar på dette området ;)

Lenke til kommentar
sålenge folk ikke bruker følgende er jeg fornøyd:
if (obj != null)
{
   return i;
}

dette er også en mye brukt måte å skrive på, men jeg mener den forvirrer mer en dranges tredje alternativ, samt at koden blir visulelt styggere også!

 

Noen med mye erfaring som har noen synspunkter på dette?

Nå er ikke jeg noen ekspert, men jeg vet at Ueland, PT, jorgis & co som programmerer VikingBoard bruker denne kodepraksisen. Det er vel en av reglene som skal gjøre det hele mer oversiktlig, og enklere å se hvor det finnes metodekropper, løkker og mer.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...