Co powiesz na pięć rzeczy, których nienawidzę w listach „Rzeczy, których nienawidzę w niektórych językach”? :RE
5- Malowanie pomarańczowej czerwieni nie czyni z niej jabłka.
Podczas projektowania języka projektanci zazwyczaj mają na uwadze to, do czego jest przydatny. Używanie go do czegoś zupełnie innego może działać, ale narzekanie, gdy tak nie jest, jest po prostu głupie. Weź Python. Jestem pewien, że ktoś ma lub ktoś kiedyś stworzy narzędzie do tworzenia plików exe z kodu Python. Dlaczego, na ziemi Bożej, chcesz to zrobić? Byłoby fajnie - nie zrozumcie mnie źle - ale nie ma pożytku. Przestań więc narzekać!
Dobrze zaprojektowany projekt prawdopodobnie zawiera kod z wielu języków. Nie oznacza to, że nie można ukończyć projektu tylko w jednym języku. Niektóre projekty mogą być w zakresie umiejętności dowolnego języka, którego używasz.
4- Czy stoisz na drewnianych nogach?
Platforma może mieć duży wpływ na to, co potrafi język. W dzisiejszych czasach śmieciarze, a nawet paskale wczesna próba „śmieciowania”, mogą pomóc w zanikaniu pamięci (może Malloc więcej pamięci RAM?). Komputery są szybsze i oczywiście oczekujemy więcej od naszych języków. I szczerze mówiąc, prawdopodobnie powinniśmy. Jednak za wygodę kompilatora w tworzeniu tabel mieszających lub ciągów lub za wiele innych koncepcji trzeba zapłacić ogromną cenę. Te rzeczy nie mogą być dziedziczone na platformie, z której są używane. Powiedzieć, że łatwo je dołączyć do języka, po prostu mówi mi, że możesz nie mieć nogi.
3 - Czyja to wina?
Błędy. Wiesz. Uwielbiam robale. Dlaczego kocham błędy. Ponieważ to oznacza, że mogę utrzymać pracę. Bez błędów byłoby wiele zamkniętych sklepów z pizzą. Jednak użytkownicy nie znoszą błędów. Ale tutaj jest odrobina zimnej wody. Każdy błąd jest winą programistów. Nie w języku. Język o tak ścisłej składni, który znacznie zmniejszyłby liczbę możliwych do wygenerowania błędów, byłby całkowicie bezużytecznym językiem. Jego umiejętności można prawdopodobnie policzyć na jednej ręce. Chcesz elastyczności lub mocy? Masz błędy. Dlaczego? Ponieważ nie jesteś doskonały i popełniasz błędy. Weź naprawdę możliwy do zidentyfikowania przykład w C:
int a[10];
for (int idx = 0; idx < 15; idx++) a[idx] = 10;
Wszyscy wiemy, co się stanie. Jednak niektórzy z nas nie zdają sobie sprawy z tego, że ta funkcjonalność może być bardzo korzystna. W zależności od tego, co robisz. Przepełnienia bufora są kosztem tej funkcjonalności. Ten kod powyżej. Jeśli faktycznie opublikowałem to publicznie. To znowu… powiedz to ze mną… „Moja wina”. Nie C za umożliwienie mi tego.
2- Czy nie powinniśmy tego umieszczać w koszu?
Bardzo łatwo jest wskazać funkcję w języku, którego nie rozumiemy, ponieważ nie używamy jej często i nazywamy głupim. Skarż się, że tam jest itp. Goto zawsze mnie bawi. Ludzie zawsze narzekają na goto w języku. Ale założę się, że twój ostatni program zawierał rodzaj goto. Jeśli kiedykolwiek używałeś przerwy lub kontynuacji, użyłeś goto. To jest to. To prawda, że to „bezpieczne” goto, ale takie właśnie jest. Goto mają swoje zastosowania. Czy używane są „niejawne” gotos, takie jak kontynuacja czy przerwa, czy jawne gotos (użycie rzeczywistego słowa kluczowego „goto” dla dowolnego języka). Nie chodzi o to, że twórcy języków są bezbłędni, ale zazwyczaj ... jeśli funkcjonalność istnieje od zarania dziejów (dla tego języka). Prawdopodobnie aspekt ten określa jakość tego języka. Czyli… to ” jest używany i prawdopodobnie nie kręci się z powodu kompatybilności wstecznej. Jest używany dzisiaj. Tak jak 5 minut temu. I używane prawidłowo. No cóż ... prawdopodobnie ktoś również używa go niewłaściwie, ale to odnosi się do # 3 na mojej liście.
1. - Wszystko jest przedmiotem.
Ok .. ten jest naprawdę podzbiorem # 2. Ale to zdecydowanie najbardziej denerwująca skarga, którą widzę na listach nienawiści. Nie wszystko jest przedmiotem. Istnieje wiele koncepcji, które nie należą ani nie muszą być przedmiotami. Umieszczanie rzeczy tam, gdzie nie należą, jest po prostu brzydkie i może obniżyć wydajność programu. Pewnie. Może niewiele w zależności od języka. Dotyczy to również # 5. Oznacza to ... tak. Globalne są w porządku. Funkcje zastosowane w metodach statycznych są prawidłowe. Łączenie programowania OO z funkcjami globalnymi jest w porządku. Teraz .. to nie znaczy, że wszyscy powinniśmy wyjść i „uwolnić” nasz kod od jego modeli obiektowych. Podczas projektowania sekcji kodu lub całego projektu powinno się zdarzyć to, co dzieje się za kulisaminależy wziąć to pod uwagę przy składaniu. Nie tylko tam, gdzie mieszka ta koncepcja i wiele innych czynników. Po co zawijać funkcje globalne w ramach klas lub pojęć przestrzeni nazw, jeśli nie ma to żadnego sensu? Weź statyczne zmienne składowe. To mnie bardzo bawi, ponieważ ... no cóż ... W zależności od języka i implementacji, oczywiście, ale ogólnie mówiąc, właśnie ogłosiłeś, że jest globalny. Tak, istnieje kilka powodów, by łączyć te koncepcje inne niż OO w opakowania OO. Jednym z nich jest oczywiście samodokumentujący się kod. To może mieć sens. Więc ... jak mówię. Nie wychodź i „uwolnij” swój kod. Ale każdy dobry nowoczesny język będzie miał globalną koncepcję poza jego modelowaniem OO. Tak, w szczególności chcę podkreślić, że język programowania OO bez globalnej koncepcji najprawdopodobniej ma poważną wadę projektową. Znów jednak .. zależy od intencji i projektu języka, więc nie próbuję wybierać żadnego konkretnego języka, a tutaj jest o wiele za dużo do przeanalizowania. W każdym razie, zastanów się, gdzie kod powinien mieszkać i być najbardziej skuteczny. Dodanie zestawu rozszerzeń do czegoś, co nie dodaje funkcjonalności ani wsparcia, po prostu szybciej zużywa klawiaturę. To nikomu nie pomaga. No cóż ... chyba że lubisz punkty brownie od osoby, która prawdopodobnie błędnie nauczyła cię, że wszystko jest przedmiotem.
Krótko mówiąc, programowanie to nie tylko bezmyślne stukanie w klawiaturę. Każdy projekt wymaga wielu rozważań projektowych. Wiem, że to banał, ale musisz na to spojrzeć pod każdym kątem. Nawet w dzisiejszych językach bezpiecznych dla czcionek. Nie tylko wyciskasz kod i oczekujesz, że będzie działał dobrze. Jasne ... to może działać, ale może nie być to właściwa droga. Ogólnie wybierz język i format, który najlepiej pasuje do konkretnego zadania ORAZ środowiska. Ale żaden język nie zabiera za to myśli. Jeśli nie myślisz ... po prostu piszesz.