Od czego zależy, czy w danym języku dozwala się robić unqualified import czy też żąda się zawsze pisania namespace?

Odpowiedz Nowy wątek
2019-06-08 14:06
0

Uwaga uwaga poniżej największa zbrodnia programisty C++ wystrzegać się jej zawsze

using namespace std;

Czy ja jestem osamotniony w tym, że uważam, że pisanie wszędzie co chwila std:: tylko zaciemnia kod, zaśmieca go i w ogóle jest zbędne?

Ale jednak przyjęło się, że using namespace cokolwiek dopuszczalne jest tylko i wyłącznie w ciele funkcji; na górze pliku jest niedopuszczalne.

Mam pytanie, może głupie, ale naprawdę nie wiem. Jak mamy taki C# na przykład, to czy dozwala się napisać na górze pliku:

using System.Collections.Generic;

I potem pisać już sobie tylko List zamiast obowiązkowo wszędzie System.Collections.Generic.List? Czy też może unqualified wildcard import jest zabroniony także w C#?

To samo pytanie dotyczy także rozmaitych Pythonów, Jav, i innych.

W skrócie: Czy ten zakaz jest charakterystyczny dla C++ czy dla języków programowania w ogóle?

Pozostało 580 znaków

2019-06-08 15:41
1

w javie, c# czy pythonie nie uzywa sie plikow naglowkowych wiec problem jest marginalny i podnieca tylko review-nazi ;)
przy tworzeniu odpowiednio wyspecjalizowanych klas/modulow wszystko powinno byc wystarczajaco jednoznaczne, jesli istnieje szansa pogubienia sie co jest skad to najprawdopodobniej nasze pliki z kodem sa po prostu za wielkie. ewentualnie przy klejeniu kilku bibliotek w jednym module mozna pomyslec o fully qualified nazwach, w c# mozna sobie fajnie aliasowac typy, w javie po prostu caly/unikalny fragment namespace :(

(Today I Learned (że z twojego wpisu)) - z tymi aliasami - WeiXiao 2019-06-08 15:47
Tak, ale problem w tym , że o ile mi wiadomo w C++ zabrania się robić using namespace cośtam NAWET w plikach implementacyjnych, a tu już jest sytuacja bardziej podobna do Javy czy C# - kmph 2019-06-09 12:44

Pozostało 580 znaków

2019-06-08 15:44
0

@kmph:
Nadinterpretujesz :) Ja jestem za silnym typowaniem. Trzeba znaleźć jakiś złoty środek między klepaniem testów do najbardziej trywialnych rzeczy, a próbie wepchania wszystkiego co się da do systemu typów. Jeśli chodzi o języki kaczo typowane to w Lispie już z 60 lat temu wymyślono w zasadzie wszystko. Tendencja jest jednak ku statycznemu typowaniu - dla przykładu TypeScript jest popularnym rozszerzeniem JavaScriptu i jego statyczne typowanie jest traktowane jako duże usprawnienie. Skomplikowane statycznie typowane języki to jednak raczej nowość i dlatego dużo jest tarcia (sporów) w tej dziedzinie.

Wracając do tematu: using namespace xxx; w C++ to naprawdę hurtowy import w porównaniu do tych typowych Javowych. W Javie połączenie import paczkaZDużąIlościąKlas.*; z import static paczka.KlasaZMasąStatycznychMetod.* w jednym pliku to raczej rzadkość. Ja jednak w C++ pisałem zbyt mało, by mieć jakieś stanowcze zdanie na ten temat.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit, 2019-06-08 15:44

Pozostało 580 znaków

2019-06-08 22:57
1
kmph napisał(a):

Ale jednak przyjęło się, że using namespace cokolwiek dopuszczalne jest tylko i wyłącznie w ciele funkcji; na górze pliku jest niedopuszczalne.

Mam wątpliwości czy „się przyjęło”.
Bawią mnie zwłaszcza przykłady typu hello world w których usilnie stawia się wszędzie te dodatkowe znaczki, w stylu std::cout, std::endl. No ludzie…

A już przy tutorialach z C++11 i dalszych, jest praktycznie gwarantowane że wszędzie będzie std::move zamiast move nawet jeśli u góry widnieje using namespace std… :-)

edytowany 1x, ostatnio: Azarien, 2019-06-08 22:59

Pozostało 580 znaków

2019-06-09 18:00
0

using namespace XXX w C++ nic nie znaczy jeśli nie masz też odpowiednich include wiec jeżeli namespace jest podzielona na kilka plików to możesz dodać tylko jej cześć do globalnego zakresu

w wątku mowa konkretnie o std… - Azarien 2019-06-09 21:14
używając std też potrzeba czasem kilku include - Miang 2019-06-09 21:32

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0