Eigener Datentyp -> Globale Variable?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Nocta hat geschrieben:Okay, das leuchtet so weit ein.
Ich muss mich nur von dem Gedanken trennen, dass die Namensräume wie in anderen Sprachen funktionieren und mir deine Regel
Die Namenräume funktionieren aber(größenteils) wie in anderen Sprachen.

Hier das Äquivalent in C zu deinem ersten Programm:

Code: Alles auswählen

#include <stdlib.h>
#include <stdio.h>

typedef struct {
  int foo;
} foo;

foo a = { .foo = 100 };
int b = 100;
void bla() {
  a.foo = 10;
}
void blubb() {
  int b = 10;
}

int main() {
  bla();
  printf("%d\n", a.foo); // 10
  blubb();
  printf("%d\n", b); // 100
  return EXIT_SUCCESS;
}
Produziert dieselbe Ausgabe wie die Python-Version.
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

Hm noch eine andere Frage:
Ist es schlechter Stil, dieses Verhalten zu benutzen?

Also einfach innerhalb einer Funktion auf ein Objekt außerhalb der Funktion zuzugreifen und zu verändern?
Das würde es mir zB ersparen, aufwendig die Rückgabe einer Funktion zu verarbeiten und mit dieser Rückgabe Objekte entsprechend zu verändern, oder mir sonst was einfallen zu lassen.
lunar

@Nocta: Kommt auf die Situation an …
BlackJack

@Nocta: Grundsätzlich würde ich aber schon sagen, dass das ein "code smell" ist.

Wobei wir vielleicht nochmal klären sollten was "auf ein Objekt ausserhalb der Funktion" bedeutet. Wo kommt das her? Wenn es als Argument übergeben wird, ist das was anderes als wenn der Zugriff fest in die Funktion einkodiert ist. Eine Funktion die Objekte entgegennimmt und deren Zustand verändert ist ziemlich normal. Solange das nicht an ein festes Exemplar gekoppelt ist, und das Verhalten dokumentiert oder offensichtlich ist, spricht da nichts gegen.

Ausser vielleicht, dass die Verantwortung der Änderung ganz oder teilweise beim Objekt liegen sollte. Das muss man aber für jeden konkreten Fall einzeln betrachten.
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

Okay danke, ich denke das beantwortet meine Frage :)
Das Objekt wird als Parameter übergeben und es ist ist relativ ersichtlich, dass das Objekt geändert werden soll.
Antworten