Fragen zu einem Cocoa-Buch

C

cyko

Aktives Mitglied
Thread Starter
Dabei seit
15.03.2004
Beiträge
361
Reaktionspunkte
2
Hallo liebe Objective-C´ler...
Ich hab nach langer Zeit endlich mal die Gelegenheit mich mal mit Objectice-C und Cocoa zu beschäftigen.
Dazu hab ich flugs ein Buch rausgekramt welches ich letztes Jahr erworben habe.
Nun weiß ich das es sich nicht um die aktuelle Fassung des Buches handelt, aber entweder das Buch ist von vorne bis hinten voller Fehlern, oder ich schnall da beim Konzept der Sprache was nicht.

Und zwar folgendes:
Der Autor gibt ein solches Beispiel an
Code:
- (int)setPreis: (int)cPreis;
{
	NSLog(@"Methode %@ von Objekt \"%@\" aufgerufen",
	NSStringFromSelector(_cmd), Name);
	
	Preis = cPreis;
}

...und zwei Dinge sprangen mir direkt ins Auge, nämlich "-(int)" und das Semikolon vor den geschweiften Klammern.
Ich würde vermuten das "-(Rückgabewert)..."gemeint ist und das ein Semikolon einen Befehl abschließt (wie in C++ oder Java bspw.).
Also würde ich das dann so machen:
Code:
- (void)setPreis: (int)cPreis
{
	NSLog(@"Methode %@ von Objekt \"%@\" aufgerufen",
	NSStringFromSelector(_cmd), Name);
	
	Preis = cPreis;
}

Liege ich da jetzt völlig falsch?
Und wenn nicht... Kennt ihr gute Bücher zu dem Thema (auch gerne in englischer Sprache).

Danke schon mal für euren Rat...
:)
 
Nö, da liegst Du nicht falsch. Halte ich jetzt aber nicht für einen katastrophalen Fehler.

Welches Buch und welche Auflage ist es dann?

Alex
 
Das Buch ist das im deutschsprachigem Raum recht bekannte
"Objective-C und Cocoa Programmieren unter Apple Mac OS X"
in der Auflage von 2005.

Na ja, es ist jetzt so das ähnliche Fehler direkt Mehrfach in dem
Abschnitt über Klassen und Vererbung zu finden sind.
Ich finde das schon ein wenig verwirrend.
Komischerweise ist es so, das ich die Abschnitte welche über
Systemgrundlagen oder die Arbeit mit dem Interface-Builder
eigentlich recht ordentlich geschrieben sind (Rechtschreibfehler
aussen vor gelassen).

Komisch finde ich des weiteren das mir der Compiler auch den "falschen" Quelltext übersetzt. Er wirft dann zwar ein paar Warnungen,
aber das Programm läuft (was bei dem falsch gesetzten
Semikolon schon recht interessant ist).
 
Das Buch ist das im deutschsprachigem Raum recht bekannte
"Objective-C und Cocoa Programmieren unter Apple Mac OS X"
in der Auflage von 2005.

Davon gibt es eine neue Auflage.

Komisch finde ich des weiteren das mir der Compiler auch den "falschen" Quelltext übersetzt. Er wirft dann zwar ein paar Warnungen,
aber das Programm läuft (was bei dem falsch gesetzten
Semikolon schon recht interessant ist).

Der Code ist ja auch syntaktisch nicht falsch.

Alex
 
Der Code ist ja auch syntaktisch nicht falsch.

Okay... kannst Du mir das Prinzip dahinter erklären?
Also warum ich hinter die Kopfzeile einer Methode auch ein Semikolon
setzen und warum der Rückgabetyp auch int sein kann?
;)
 
Okay... kannst Du mir das Prinzip dahinter erklären?
Also warum ich hinter die Kopfzeile einer Methode auch ein Semikolon
setzen und warum der Rückgabetyp auch int sein kann?
;)

Warum sollte der Rückgabetyp nicht int sein können? Du gibts nichts zurück, das ist nicht klug, und semantisch wahrscheinlich auch ein Fehler. Syntaktisch aber nicht.

Und ich habe jetzt die C Definition nicht hier, aber an einem überflüssigen Semikolon stört sich der Compiler nicht.

Du kannst auch printf ("Hallo\n");;;;;;;;; schreiben.

Alex
 
Nun... das ich einen Rückgabetyp angeben kann den ich
dann nicht nutze ist eine Sache.
Aber das ich hinter den Methodenkopf und vor den geschweiften Klammern
ein Semikolon setze, das ist in objective-c, c und c++ zu fuss auf
der Konsole z.B. gar nicht drin.
(Ist ja jetzt nicht so das ich das hinter Preis = cPreis; gesetzt hätte o.ä.)
 
Aber das ich hinter den Methodenkopf und vor den geschweiften Klammern
ein Semikolon setze, das ist in objective-c, c und c++ zu fuss auf
der Konsole z.B. gar nicht drin.

Wie meinst Du das?

Alex
 
- (int)einMethode: (int)einInt;
{
}

geht wohl in Xcode durch.

int eineMethode(int einInt);
{
}

geht unter c, c++ so nicht... Also wird erst gar nicht kompiliert.
 
Xcode benutzt aber nichts anderes als gcc.

Alex
 
Das Xcode das ganze Arsenal an GNU-Tools nutzt, das weiß ich wohl... ;)
Ich lerne zwar jetzt erst Objective-C und Cocoa, aber hab
vorher Schon einiges mit C++ und Qt auf dem Mac gemacht.
Das ist wahrscheinlich auch das Problem... :(

Naja... Danke auf jeden Fall schon mal für Dein Engagement...

Ich denke ich schau mir mal die Neuauflage von dem Ding an.
Sind wohl die einzigen deutschsprachigen Autoren die was in der Richtung schreiben und das sollte man wohl belohnen.
Der ganze englischsprachige Kram ist ausserdem meist uralt.
 
Hallo

zu erst einmal:
Ich bin Amin Negm-Awad, also der Co-Autor der zweiten Auflage.

Das Semikolon ist erstaunlicherweise erlaubt. Ich wollte es auch nicht glauben, habe es aber mal vor Ewigkeiten ausprobiert. Der Fehler stammt von dem Kollegen Rodewig und er dürfte mit an Sicherheit grenzender Wahrscheinlichkeit ein Copy-&-Paste-Fehler sein.

Das int dürfte entstanden sein, weil er es nachträglich geändert hat und den Rückgabetyp vergaß. Du solltest grundsätzlich mit -Wall und -Werror kompilieren. Dann fällt so etwas auf.

Ansonsten:
http://cocoading.de
 
Zuletzt bearbeitet:
Vielen Dank für die ausführliche Antwort.
Bei dem Service bin ich echt froh auch Eure zweite
Auflage gekauft zu haben ;-) .
 
Das wird einfach schon deshalb hilfreich sein, weil viel mehr Objective-C und Cocoa drin ist -- und auch neue Fehler. ;-)

Dafür gibt es aber eine Errata-Seite unter der zitierten Domäne.
 
Zu der Sache mit dem Semikolon habe ich (ich glaube es war bei call me fishmeal) auch schon mal die Empfehlung gelesen es an der "irritierenden" Stelle grundsätzlich zu setzen.
Hintergrund: So kann man die entsprechende Zeile per copy-and-paste aus der @implementation section in die @interface section (und umgekehrt) übernehmen.


?=?
 
Ich glaube, dass man durchaus die Mühe aufwenden kann, das Semikolon zu löschen. Von derlei Tricks halte ich nicht viel.
 
  • Gefällt mir
Reaktionen: below
Zurück
Oben Unten