Lekcja języka polskiego w programowaniu

Wielu programistów to umysły tzw. ścisłe. Osoby takie mają to do siebie, że nie pałają wielką radością do przedmiotów typu język polski – muszę kupić ziemniaki – czy też historia. Mimo pewnej niechęci i braku opanowania sztuki pięknego pisania wypracowań, większość z nich (nas) – a do tych ziemniaków jeszcze jakieś pomidory – potrafi przestrzegać pewnych zasad pisząc owe wypracowania. Od małego uczą nas, że wypracowanie powinno mieć wstęp, rozwinięcie – no i nie mogę zapomnieć o mięsie na obiad – no  i oczywiście zakończenie. Czy ktoś  wrzucił by w kolejne zdania wypracowania np. listę zakupów?

No właśnie…. pisząc wypracowanie, zamieszczamy tam tylko treść owego wypracowania – mniej lub bardziej zgrabnie ale tylko treść.

ile to razy napisałem kod tego typu:

[csharp]
public FileStream UtworzPlik(string sciezka,string nazwaPliku){
if( ! Directory.Exist(sciezka) ){
Directory.Create(sciezka)
}
var plik = File.Create(Path.Combine(sciezka,nazwaPliku));
return plik;
}
[/csharp]

popatrzmy co tutaj jest nie tak. Funkcja nazywa się UtworzPlik ale w środku tworzymy katalog. Coś jest nie tak. Jeżeli funkcja tworzy plik to dlaczego tworzy też katalog? Taka wydawało by się pierdołka powoduje, że jeżeli będziemy chcieli wykorzystać ten kod w późniejszym czasie w innym miejscu po prostu wywołując go dostaniemy i plik i katalog.

Oczywiście sprytny programista sobie z tym poradzi:

[csharp]
public FileStream UtworzPlik(string sciezka,string nazwaPliku, bool utworzKatalog){
if( ! Directory.Exist(sciezka) && utworzKatalog){
Directory.Create(sciezka)
}
var plik = File.Create(Path.Combine(sciezka,nazwaPliku));
return plik;
}
[/csharp]

Oto pierwszy krok do złego kodu, a należy pamiętać, że zły kod boli całe życie. Wykonanie takiego fantastycznego „hacku” kilka razy na tej funkcji może doprowadzić do sytuacji gdy wywołanie funkcji będzie wyglądało tak:

[csharp]
UtworzPlik(@"c:\temp\moje\testowe",@"plikTymczasowy.txt",true,false,3,false,false);
[/csharp]

i teraz konia z rzędem temu kto zgadnie co może robić powyższa funkcja bez zaglądania do niej. Przeglądnij swój kod bo jest duża szansa, że takie cuda piszesz. Ja przyłożyłem rękę do kilku (nastu) takich funkcji. Nie róbmy tego więcej.