Toon posts:

[Java] wat is efficienter

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb de volgende
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public class UpdateScreen 
{
   final int NO_STATUSLINES = 3;
   final int STATUSLINE1 = 0;
   final int NO_INDICATORS_STATUSLINE1 = 4;
   final int STATUSLINE2 = 1;
   final int NO_INDICATORS_STATUSLINE2 = 6;
   final int STATUSLINE3 = 2;
   final int NO_INDICATORS_STATUSLINE3 = 2;

   //Statusline 1
   final int CONTROL_ELECTRONICS_POWERED = 0;
   final int CONFIG_OK = 1;
   final int CHANGING_CONFIG = 2;
   final int STANDBY = 3;
   //Statusline 2
   final int COMMUTATOR_OPEN = 0;
   final int COMMUTATOR_OPEN_ON = 1;
   final int COMMUTATOR_OPEN_OK = 2;
   final int COMMUTATOR_POS_OK = 3;
   final int COMMUTATOR_POS_ON = 4;
   final int COMMUTATOR_POSITIVE = 5;
   //Statusline 3
   final int MASTER = 0;
   final int SLAVE = 1;

   int statusLines[][];

   public UpdateScreen() 
   {
    statusLines = new int[NO_STATUSLINES][];
    statusLines[STATUSLINE1] = new int[NO_INDICATORS_STATUSLINE1];
    statusLines[STATUSLINE2] = new int[NO_INDICATORS_STATUSLINE2];
    statusLines[STATUSLINE3] = new int[NO_INDICATORS_STATUSLINE3];
   }

   public String convertStatus( int statusLine, int status )
   {

   }
}

In de functie convertStatus wil ik de informatie van de statuslines (die in werkelijkheid veel meer informatie bevat) die ik van de server ontvang omzetten naar een string om die vervolgens op het scherm te zetten, mijn vraag is nu wat is efficienter:

MOGELIJKHEID 1:
code:
1
2
3
4
5
6
7
8
String convertArray[][] = { { "Control Electronics Powered", "Config o.k.", "Changing Config", "Standby" },
{ "Commutator Open", "Commutator Open On", "Commutator Open o.k.", "Commutator Pos o.k.", "Commutator Pos On", "Commutator Positive" }, 
{ "Master", "Slave" } };

public String convertStatus( int statusLine, int status )
{
   return convertArray[statusLine][status]
}

MOGELIJKHEID 2:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public String convertStatus( int statusLine, int status )
{
   switch ( statusLine )
   {
    case STATUSLINE1:
    {
       switch( status )
       {
        case CONTROL_ELECTRONICS_POWERED:
           return "Control Electronics Powered";
           break;
             ...
            ...
        ...
}

Welke manier van omzetting is het meest efficient in mijn situatie?!?

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Je moet even [ code ] [/ code ] tags om je code plakken. (En dan zonder spaties).

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

[algemeen praatje]
Je moet goed weten wanneer je gaat optimaliseren. Er is 1 hele duidelijke regel: ga niet optimaliseren, tenzij het nodig is. Dus als dit geen tig keer per seconden wordt aangeroepen moet je niet gaan optimaliseren, en kiezen voor leesbaarheid.

[antwoord op vraag]
Ik denk dat het met die arrays het snelste zijn, maar switch case statements zijn (als de cases op eenvolgend zijn) ook nog vrij efficient omdat de offset bepaald word waarnaartoe gesprongen moet worden. Maar zie verder algemeen praatje.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Als je een int en een String hebt die bij een Status horen, lijkt het mij vanzelfsprekend dat je dan een klasse Status invoert. Via deze klasse kan je gevalsonderscheid voorkomen. Gevalsonderscheid is namelijk een 'bad smell' in OO code: het stinkt.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Status {

   public static final Status COMMUTATOR_POSITIVE = new Status(5, "Commutator positive");
   public static final Status ....

   private int _code;
   private String _description;

   private Status(int code, String description) {
    super();
    _code = code;
    _description = description;
   }

   public String getDescription() {
    return _description;
   }
}

Je kunt er nu ook nog eventueel andere methoden aan toe voegen. Bovendien wordt je enumeratie (want dat was je in feite aan het doen) safe. Je kunt nu namelijk een 'Status' vereisen als argument van methoden ipv een int. Een int mag alle mogelijke waarden hebben, een Status niet omdat de constructor private is.

Daarnaast is een 'status' een Status en geen int. Zulke coderingen zijn heel sexy, maar in gewone code kan je daar beter wat abstracter mee werken zoals ik hier doe.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
mdenbravenboer bedankt!

Ik ga een variant van je code implementeren, de oplossing is overzichtelijker dan mijn opties