Autor Wątek: Nazywanie klas i plików  (Przeczytany 12156 razy)

Offline dynax

  • Użytkownik

# Sierpień 15, 2014, 16:08:38
Dokładnie o to mi chodziło. Np. silne rozdzielenie funkcjonalności aplikacji od tego co się dzieje w mainie (nie pamiętam jak on to dokładniej nazwał, w każdym razie chodzi o to by kod "nie-mainowy" był jak najbardziej

Achh.. to był ten moment w którym kazał ograniczać ify i switch na rzecz polimorfizmu? :D

PS: Filmy też fajne. Są gdzieś dostępne legalnie na yt? Bo ja oglądałem po intranecie w pracy.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline koirat

  • Użytkownik

# Sierpień 15, 2014, 16:15:00
Niebardzo rozumiem. Możesz dać jakiś przykład?

Bede pisał w C#, załóżcie że to pseudokod ;)


public interface ISession{
float Progress{get;}
bool IsCompleted{get}
}

public class LongLastingOpperation{

private class Session:ISession{
//implementacja ISession
}

public ISession StartLongLastingOpperation(){

//tu gdzies tworzymy obiekt "Session session;" którego stan będziemy regularnie updatować.

return session;
}

}

Offline Xirdus

  • Redaktor

# Sierpień 15, 2014, 16:34:14
PS: Filmy też fajne. Są gdzieś dostępne legalnie na yt? Bo ja oglądałem po intranecie w pracy.
Niestety, jedynie można kupić na https://cleancoders.com po dolarze od odcinka. Ja też w pracy widziałem.

@koirat:
Aha, o takie coś chodzi. Osobiście to zamiast obiektu ISession zwróciłbym funkcję o typie float() powiązaną jakoś z tym obiektem LongLastingOpperation [sic], która robiłaby to samo co twój Progress. Ale nawet jeśli miałbym używać interfejsów, to interfejs nazwałbym Session, a tą prywatną klasę albo MySession albo LongLastingOperationSession (raczej to drugie).

Offline yarpen

  • Użytkownik

  • +2
# Sierpień 15, 2014, 17:09:45
Wręcz przeciwnie. Jak mówi przysłowie, w programowaniu są tylko dwa trudne problemy: nazewnictwo, opróżnianie cache'y, i pomyłki o jedynkę.
Nie traktowalbym takich przyslow bardzo powaznie. "Bez znaczenia" to moze za duzo powiedziane, ale naprawde nie widze, zeby wybrana konwencja byla przesadnie istotna. Pracowalem z duzymi systemami (miliony linii) w wielu (~10) diametralnie roznych konwencjach i nigdy nie zauwazylem zadnej roznicy w produktywnosci. Jak dla mnie ta dyskusja to klasyczna rozmowa o kolorze szopki rowerowej.
« Ostatnia zmiana: Sierpień 15, 2014, 17:11:57 wysłana przez yarpen »

Offline walkinguer

  • Użytkownik

# Sierpień 15, 2014, 17:12:48
Na chwilę się wtrącę. Moje nazwy to były tylko przykłady. Mam za słabą pamięć i zwyczajnie nie chciało mi się zastanowić nad stosownym przykładem.

GUI_Menu rzeczywiście nie istnieje w moich projektach i również nie mam pojęcia, co niby miałoby robić. Nie istnieje również GUI_Pause. Naprawdę trzeba było się o to przyczepić? Ech. Prawda jest taka, że nie mam żadnej funkcji, której nazwa zaczynałaby się w ten sposób.


Opcjonalnie możecie sobie pobrać jakiś projekt Open Source, zajrzeć w kod i nie dyskutować. Ale chyba chodziło właśnie o to, żeby każdy wypowiedział się, co preferuje i w jaki sposób.

Offline ArekBal

  • Użytkownik

# Sierpień 15, 2014, 17:44:59
Ja mam swoje typy ładnego kodu, ale o ile nie zaczynam projektu i nie narzucę wtedy innym to stosuję te które już są(o ile są logiczne).
Najbardziej gryzie w oczy i czasami przeszkadza w kodowaniu właśnie nie trzymanie się konwencji.

Offline koirat

  • Użytkownik

# Sierpień 15, 2014, 18:17:33
@koirat:
Aha, o takie coś chodzi. Osobiście to zamiast obiektu ISession zwróciłbym funkcję o typie float() powiązaną jakoś z tym obiektem LongLastingOpperation [sic]
Ja tam wole obiekt zawsze mogę go poszerzyć o inne informacje. Np informacja o błędzie. Będę mógł go również wyposażyć w możliwość nagłego zakończenia operacji.

Offline Xirdus

  • Redaktor

# Sierpień 15, 2014, 19:26:58
Ja tam wole obiekt zawsze mogę go poszerzyć o inne informacje. Np informacja o błędzie. Będę mógł go również wyposażyć w możliwość nagłego zakończenia operacji.
No widzisz, wszystko zależy od sytuacji. Jak trzeba więcej niż jedną funkcję to oczywiście interfejs najlepszy. Co nie zmienia faktu, że I jest zbędne ;) Znaczy, jak robisz w C#, to pisz I - bo taka jest konwencja, a od złej konwencji gorsze jest nietrzymanie się konwencji.

Offline Xion

  • Moderator
    • xion.log

  • +1
# Sierpień 15, 2014, 19:56:08
Cytuj
Wtedy często lądujesz z interfejsem i klasą o tej samej nazwie. I jak tu bez przedrostka?
class FooImpl implements Foo { }A po co? Chociażby po to, żeby móc dodać fake'ową / mockowaną implementację Foo do użycia w testach.
Naturalnie nie znaczy to, że każda klasa powinna mieć swój interfejs.

Cytuj
Bardzo dobra książka, ale IMO zbyt ekstremalna - autor np. uważa, że każda funkcja powinna mieć nie więcej niż 3-4 linijki. Dobrze jest przeczytać, niekoniecznie dobrze stosować w praktyce.
Stosowność porad z Clean Code zależy też trochę od języka, o czym <shameless-plug> pisałem jakiś czas temu </shameless-plug>.

Cytuj
"Bez znaczenia" to moze za duzo powiedziane, ale naprawde nie widze, zeby wybrana konwencja byla przesadnie istotna.
I dlatego nie mówiłem w ogóle o konwencjach, bo camelCase vs InnyCamelCase vs snake_case vs nocaseatall różni się tylko pozornie. W każdym większym projekcie będzie się zresztą używało kilku języków naraz, z których przynajmniej jeden będzie miał inną konwencję niż pozostałe.

Cytuj
Jak dla mnie ta dyskusja to klasyczna rozmowa o kolorze szopki rowerowej.
Jak większość dyskusji, w której biorą udział programiści :)

Offline koirat

  • Użytkownik

# Sierpień 15, 2014, 20:53:17
 "InnyCamelCase" nazywamy PascalCase

Offline Xion

  • Moderator
    • xion.log

# Sierpień 15, 2014, 21:12:42
@up: Widziałem to w C, C++, C#, Pythonie, Ruby, Haskellu i pewnie jeszcze kilku innych językach, które z Pascalem nie dzieliły nawet tej samej dekady, więc nie wiem czy faktycznie "nazywamy" tę konwencję akurat w ten sposób :)

Offline Xirdus

  • Redaktor

# Sierpień 15, 2014, 21:15:55
@Xion: Wikipedia mówi, że Microsoft mówi, że tak. Ale czy to ważne?

Offline Kos

  • Użytkownik
    • kos.gd

# Sierpień 15, 2014, 21:32:27
Ech, marzyciele. gdyby tak każdy szeroko przyjęty termin miał racjonalne uzasadnienie w etymologii... :)

Co do dzielenia 100-linijkowej funkcji na 5-linijkowe: -1 ode mnie. Są powody by dzielić (DRY, testowanie, złożoność cyklometyczna), ale na pewno nie czytelność. Łatwiej mi się czyta kod, jeśli czytam go od góry do dołu, a trudniej, gdy jest 8 warstw pośredniości i nie rozumiem jednej funkcji jeśli nie przeczytam rekurencyjnie definicji 50 innych.
« Ostatnia zmiana: Sierpień 15, 2014, 21:34:56 wysłana przez Kos »

Offline ArekBal

  • Użytkownik

# Sierpień 15, 2014, 23:23:01
To znaczy że jest problem z nazewnictwem tych funkcji...

Offline Veldrin

  • Użytkownik

# Sierpień 16, 2014, 04:21:56
Podstawa to przyjęta w projekcie konwencja kodowania. Nie ważne czy projekt jest jednoosobowy przy pracuje nad nim 100 osób.

Jeżeli określimy w dokumencie konwencji, że każda klasa zaczyna się od "UltraKlasaOdnośnieXXX" i się tego trzymamy to super.

Programista ma na głowie 1000 ważniejszych spraw niż konwencja, którą trzeba przyjąć i tyle. Ostatecznie i tak dążymy do sytuacji gdy kod działa i zarabia ;).