Programátorské poklesky

Následující postupy a obraty jsou tak nevýhodné, že by se neměly objevit v žádnám školním programovém díle odevzdávaném na MFF UK. Každý absolvent 1. ročníku Bc. studia by se jich měl vyvarovat bez ohledu na programovací jazyk..


"Kolekce", knihovní funkce: zejména v jazyku Java se setkávám s přístupem, že ani triviální datovou strukturu studenti neprogramují a použijí některou z vestavěných tříd z knihovny Collections.
Třídění pěti prvků pak znamená, že se musí nadeklarovat zvláštní třída (jen za tímto účelem!), komparátor a nakonec zavolat třídící rutinu.


Celočíselné mocniny: druhou mocninu čísla (komplexního, reálného) opravdu není dobré počítat pomocí funkce pow()! Obzvlášť posloupnosti kódu jako:

 double a, b;
 ...
 double len = Math.sqrt( Math.pow( a, 2 ) + Math.pow( b, 2 ) );
 double xyz = Math.pow( a, 2 ) * Math.pow( b, 2 );
jsou iritující. Snad jedině pro opravdu velké exponenty by se o tom dalo uvažovat.


Vyhodnocování polynomu: opravdu nikdy už si nepřeji vidět kód typu:

 protected double[] coef;
 protected int degree;

 double evaluate ( double x )
 {
   double val = coef[0];

   for ( int i = 1; i <= degree; i++ )
     val += coef[i] * Math.pow( x, i );

   return val;
 }
.. hádejte proč?!
Pokud by bylo x komplexní číslo, je to s efektivitou ještě horší!

Tipněte si, kolikrát je výše uvedená implementace pomalejší než ta "rozumná":
a. 2x
b. 10x
c. 20x


Další perla s umocňováním - kolik chyb je v tomto malém kousku kódu:

public double pow ( double x, double k )
{
  double y = 1;
  for ( int i = 0; i < k; i++ )
    y = y * x;
  return y;
}


Používejte výčtové typy (nebo aspoň celočíselné konstanty): pomocí stringů je to neefektivní a můžete se snadno splést.. Takhle by to tedy vypadat nemělo:

 String type = "Circle";

 ...

 if ( type.equals( "Circle" ) )
 {
   ...
 }
 else
 if ( type.equals( "Rectangle" ) )
 {
   ...
 }
 else
 if ( type.equals( "Triangle" ) )
 {
   ...
 }
 ...


Triviální postupy: je mnoho triviálních postupů ("vzorečků"), které by každý měl znát, abychom pak v kódu neviděli:


[Projekt GrCis]  [Projekt JaGrLib]  [Přednášky a semináře]  [Josef Pelikán]

Valid XHTML 1.1 Copyright (C) 2007-2012 J.Pelikán, last change: $Date: 2013-11-22 23:48:14 +0100 (Fri, 22 Nov 2013) $
Send comments/requests to pepca.at.cgg.mff.cuni.cz