Autor Wątek: Zmienne globalne  (Przeczytany 2129 razy)

Offline Xirdus

  • Redaktor

# Grudzień 07, 2011, 23:17:49
Zdajesz sobie sprawę, że istnieją języki bez zmiennych globalnych?
Ale tak naprawdę bez, że nawet staticów nie ma?

Offline Mr. Spam

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

Offline izaw

  • Użytkownik

# Grudzień 07, 2011, 23:36:51
A masz jakąś zmienną czy stałą (inne specyfikatory wg uznania) w C# poza klasą?

Podaj kod.

Offline Xender

  • Użytkownik

# Grudzień 07, 2011, 23:38:57
@izaw - http://msdn.microsoft.com/en-us/library/98f28cdx.aspx i przeczytaj post nad twoim bo chyba się o to nie pokusiłeś.

Offline hashedone

  • Użytkownik

# Grudzień 07, 2011, 23:39:41
W prologu zmienne mogą być tylko w obrębie predykatu, z resztą w większości języków funkcyjnych zmienne muszą być w obrębie czegoś konkretnego (o ile mówimy tu o programach wolnostojących, bo języki funkcyjne chyba wszystkie mi znane pozwalają pracować w shellu i wtedy definiujemy wszystko globalnie dla środowiska). I tu nie da się nagiąć zasad (jak w C# przez zmienne statyczne).

Offline izaw

  • Użytkownik

# Grudzień 08, 2011, 00:45:17
@olo16

Tak bardzo kulturalnie, gdzie tam masz jakieś zmienne poza klasami? Dokładnie o tym pisałem. Co ma statyczna klasa do zmiennej poza klasą?
Rzuciłeś uwagę o nieuważnym czytaniu i zamykasz temat. Czyli moje na wierzchu i koniec. Dzięki.

Offline vashpan

  • Użytkownik
    • Strona

# Grudzień 08, 2011, 00:58:35
Bezczelniutki troszke jestes.... zmienna statyczna w .NET to najzwyklejsza zmienna globalna, a to ze sobie lezy w przestrzeni nazw klasy... co za roznica? To tylko proteza/ukrycie.

Offline izaw

  • Użytkownik

# Grudzień 08, 2011, 01:27:25
Właśnie to gdzie leży jest najważniejsze. Bo to określa specyfikacja. A co potem z tym robi kompilator i CLR nie jest istotne.

W ten sposób nie ma żadnych klas, bo po kompilacji już ich nie ma. Napisz program ze zmienną położoną globalnie poza klasą. Protezy zostaw chirurgom.

Offline Xender

  • Użytkownik

# Grudzień 08, 2011, 09:13:06
@izaw nie zamykam tematu, ale proponuję to zrobić, bo mam już trochę dość takich czczych wymian zdań. Przeważnie nie prowadzą one do niczego konstruktywnego a jedynie do kłótni. Poza tym jest pewna tendencja: robienie offtopu w każdym wątku, w którym główny temat uzna się za zakończony. Może czas aby trochę zaostrzyć moderację, albo chociaż częściej wydzielać takie offtopy?

A co do samych zmiennych globalnych:
Cytat: Wikipedia
Zmienna globalna to zmienna istniejąca przez cały czas życia programu i widziana z wielu miejsc w programie.
Xirdus mówił o zmiennych statycznych klas. Taka zmienna, gdy jest publiczna, też jest globalna, bo można się do niej odwołać z każdego miejsca kodu. Czyli spełnia definicję. I nie chodzi tu o to, że jest nią w kodzie wynikowym, jest nią w kodzie źródłowym.

Offline Anton Chigurh

  • Użytkownik

# Grudzień 08, 2011, 10:17:31
Zmienne statyczne mogą być nawet bardziej globalne niż by się mogło wydawać. Jeśli nieodpowiednio zrozumie się luźne pojęcie "czas życia programu" to można się zdziwić. Np. w javie, zmienne statyczne utrzymują wartość w ramach czasu pracy całego JVM, co może doprowadzić do niespodzianek np. podczas przeprowadzania serii testów jednostkowych, gdzie "statiki" cały czas dzielnie działają obracając w niwecz całą koncepcję unit testu (chyba że się mądrze unika ich używania :)).

Offline Troll

  • Użytkownik
    • Oficjalna strona gry Gizarma

# Grudzień 08, 2011, 12:21:26
zmienne statyczne utrzymują wartość w ramach czasu pracy całego JVM, co może doprowadzić do niespodzianek

Najśmieszniej jest jak piszesz javowy applet i nie do końca wiesz, że tak to działa. Jeżeli odświeżysz strone z appletem, pola static nie są "resetowane" przy każdym starcie appletu, co może doprowadzić do dziwnego zachowania programu lub wyczerpania limitu pamięci.

Offline Xirdus

  • Redaktor

# Grudzień 08, 2011, 19:13:38
W ten sposób nie ma żadnych klas, bo po kompilacji już ich nie ma.
AFAIK to w C# i wielu innych językach dalej są. Po prostu musiałem.

Offline Liosan

  • Moderator

# Grudzień 08, 2011, 22:18:23
W Javie najśmieszniejsze jest to, że enumy, sporo wartości obiektu Integer i jeszcze parę innych rzeczy to tak niby-niemodyfikowalne globale... :)

@hashedone W kontekście prologu trudno mówić o zmiennych.

Liosan

Offline Esidar

  • Użytkownik

# Grudzień 08, 2011, 23:00:22
Najśmieszniej jest jak piszesz javowy applet i nie do końca wiesz, że tak to działa. Jeżeli odświeżysz strone z appletem, pola static nie są "resetowane" przy każdym starcie appletu, co może doprowadzić do dziwnego zachowania programu lub wyczerpania limitu pamięci.
To już raczej wina złej konstrukcji plugina do przeglądarki. Bez sensu jest odpalanie tego samego appletu w obrębie jednej instancji JVM.

A co się dzieje gdy jest kilka appletów na jednej stronie ? Są na w tej samej instancji JVM ? Albo co gdy jest kilka stron (w zakładkach) z tymi samymi albo różnymi appletami ?