Een ranzige code generator, die nog geld kost ook, produceerde dit:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| //**************************************************
// Begin of function: Update Customer
//**************************************************
public double Update_Customer(string idCustomer, string txtCustomer)
{
string strSql;
strSql = "UPDATE Customer Set idCustomer = '" + idCustomer.ToString() +
"', txtCustomer = '" + txtCustomer.ToString() + "' WHERE idCustomer = '" +
idCustomer.ToString() + "'";
try
{
clsSQLCommand dbClass = new clsSQLCommand();
return dbClass.UpdateData(strSql);
}
catch (Exception e)
{
throw e;
}
}
//**************************************************
// End of function: Update Customer
//************************************************** |
De generator:
http://www.invenmanager.com/codegenerator/default.aspx
Alle sql is vulnerable, je kunt sql injecteren in de queries. Magistraal

(idCustomer.ToString() kan bv zijn: ';delete from table --
en andere grappen

)
Dit soort mallotigheid:
SQL:
1
2
3
4
5
| SELECT * FROM Foo
WHERE Bar IN
( SELECT Bar FROM Foo2)
OR
( SELECT Bar FROM Foo3) |
Die OR zorgt voor een performance nekslag, terwijl dit veel sneller kan.
In 3GL's heb je ook veel leuke dingen. Sommige programmeurs zetten routines niet goed op. Die bouwen een routine die alleen dingen mag doen wanneer een zekere conditie waar is. Ipv bij aanvang in de routine te testen of de conditie geldt en zoniet meteen terug te keren, nemen ze die conditie bij elk blok code mee, met een veelvoud aan ifs en een zwierige indent-tree in de sourcecode als gevolg.
In de Linux kernel sourcecode gebruiken ze een C-macro om single line if / else clauses toch van '{}' te voorzien, wat nuttig is bij andere macro's.
voorbeeld:
C:
1
2
3
4
| if(foo==bar)
DOMACRO
/* other code */ |
Als DOMACRO nu eens 2 lines bevat, dan zou je krijgen:
C:
1
2
3
4
5
| if(foo==bar)
line1
line2
/*other code*/ |
Echter, line2 wordt altijd uitgevoerd. Om dit te voorkomen hebben ze een C macro in elkaar geprutst die altijd '{}' om een macro heen plaatst.
Dit is totaal overbodig, als je bedenkt dat je dit soort hoopla-hackwerk niet nodig hebt wanneer je altijd '{}' om je if / else clause blocks zet, dus:
Iets 10 keer te moeilijk doen en dan nog met je ogen dicht.
Verder zijn er natuurlijk legio voorbeelden van mensen die denken dat wanneer ze met een OO taal werken, ook alles tot in de kleinste details in classes moeten stoppen, waarbij je dus veel regels code kwijt bent aan het heen en weer sjoelen van pointers naar data tussen objects, terwijl een functie in een procedurele taal dit veel efficienter kan oplossen.