Welche Programmiersprache?

Entschuldigt wenn ich diesen Topic für eine kurze Frage meinerseits verwende (wollte in diesem Zusammenhang nun kein neues Thema aufmachen):

Ich bin erst Mitte 2006 komplett auf die Mac-Plattform umgestiegen. Davor hatte ich Windows-Bedingt Programmiererfahrungen in VB, C, C++, Scriptsprachen selbstverständlich auch (insbesondere VBScript und Websprachen wie PHP und Perl).

Ich würde mich sehr gerne einmal mit Objective-C in Verbindung mit Cocoa versuchen, allerdings scheitert das derzeit noch komplett an der ungewohnten Syntax dieser Sprache - das ist zwar in kleinen Teilen ähnlich zu C, aber der komplette Aufbau, die Struktur und Befehle für sich unterscheiden sich bereits erheblich.

Gibt es evtl. Lesematerial / Tutorials im Web, wo man einen leicht verdaulichen Einstieg darin findet? Ich brauche kein Buch was mir erklärt, wie Computerprogramme, Bedingungen, Schleifen etc. funktionieren, sondern im besten Fall einfache Beispiele um sich einzugewöhnen. Evtl. auch ein Vergleich C++-Code mit Objective-C-Gegenstück, zumindest was die Grundsachen anbelangt (Operatoren, Vergleiche, Variablen, Arrays usw.).
 
Schau mal 2 Beiträge weiter vorn, da habe ich ein sehr gutes Tutorial verlinkt und der Autor ist auch hier. ;)
 
Bei Operatoren und Vergleichen gibt es keinen Unterschied. Beachte aber, dass Objective-C Objekte nur auf dem Heap erzeugt. Es werden also Zeiger verglichen. Willst du wirklich einen Objektinhalt vergleichen, so gibt es isEqual…-Methoden und dergleichen.

Die auffälligste Unterscheidung 9ist der Versand einer Nachricht, der durch [] gekennzeichnet wird

object->Method();
[object message];


Parameter werden nicht in die runden Klammern geschrieben, sondern durch : gekennzeichnet, wobei man ihnen Namen geben kann

object->method( param, 5 )
[object messageWithParameter:param andAnotherOne:5];

Die entsprechende Methodendefinition sieht dann so aus:
@implementation class
- (void)messageWithParameter:(NSString*)aString andAnother:(int)value {

}
@end

Eigentlich ist das alles nicht sehr schwierig.
 
Parameter werden nicht in die runden Klammern geschrieben, sondern durch : gekennzeichnet, wobei man ihnen Namen geben kann

Wobei die Parameter selbst eigentlich keine Namen haben. Sieht halt nur so aus, weil man sie hinter die Doppelpunkte schreiben darf.
[object messageWithParameter:param andAnotherOne:5];
Das wird dann zu einem Aufruf in der Art

Code:
objc_msgSend(object, @selector("messageWithParameter:andAnotherOne:"),param,5)
 
Zuletzt bearbeitet:
Nö, die Parameternamen sind nur Bestandteil des Methodennamens. Ist aber letztlich eine Definitionsfrage und gehoppelt wie gesprungen.
 
Eigentlich ist das alles nicht sehr schwierig.

Richtig. Vor allem wahr das ziel von SmallTalk (an das sich Objective-C anlehnt), natürliche Sprache nachzubilden.

In Objective-C kann man z.B. schreiben:

[Lisa wirf:[denBall mitFarbe:Rot] zu:Jupp];

In C++ sähe das dann so aus:

Lisa->wirfWasZuWem (ball->farbe(rot), Jupp);

Da ist doch offensichtlich, was hübscher ist.

Alex
 
Nö, die Parameternamen sind nur Bestandteil des Methodennamens. Ist aber letztlich eine Definitionsfrage und gehoppelt wie gesprungen.
Mit der Argumentation kannst du diese Fähigkeit jeder Programmiersprache andichten.

Wenn die Parameter wirklich Namen hätten müsste man sie nicht zwei Mal in der Methodendefinition benennen(hat dann quasi 2 Namen andAnother und value in deinem letzen Beispiel).

Aber das ändert natürlich nichts daran, dass die Methodenaufrufe recht anschaulich sind. Ich finde allerdings, dass sie etwas nervig zu schreiben sind, hoffentlich wird sich xcode3 da ähnlich wie Textmate verhalten.
 
Zuletzt bearbeitet:
Dann mach mal. Kannst ja mit Prolog, Fortran und Lisp anfangen ;)

Alex
Ich weiß nicht worauf die hinaus willst, aber Fortran kennt wohl tatsächlich benannte Parameter.

Aber du hast natürlich recht in Whitespace oder Brainfuck wird das natürlich schwer ;)

Worauf ich hinauswollte: Nur weil man Parameter in den Methodennamen reinschreiben darf, heißt das noch lange nicht, dass die Parameter Namen haben. C hätte ja auch nicht auf einmal benannte Parameter nur weil man die Methode

Code:
int gibmirKartoffelnDerGröße_derSorte(int Größe,int Sorte)

nennt(das wäre meine Argumentation für C ;), wenn man das „nicht“ ersatzlos streicht).
 
Zuletzt bearbeitet:
@pdr2002:
Das mit einem Link versehene Wörtchen "Hier" hatte ich doch glatt übersehen als ich den Topic durchgelesen habe ;-) Danke!

@below:
Ich denke das hat vielmehr etwas damit zu tun, mit welchen Sprachen man "grossgeworden" ist bzw. am meisten nutzt. Die reine C/C++-Syntax ist für mich wesentlich verständlicher, zumal selbst PHP, Perl und andere Sprachen davon abgewandelt sind und von der groben Syntax gesehen dieselbe Struktur aufweisen.

Smalltalk kenne ich ebenso wie Objective-C nicht. Ich weigere mich aber, auf einem System was mir gefällt eine Alternativsprache zu nutzen (z.B. Java oder C++, von Basic reden wir mal besser nicht), aus diesem Grund will ich mir Objective-C einmal näher ansehen - zumal es die Entwicklungstools kostenlos dazu gibt.

@anegmawad:
Danke für den Link, sieht auf den ersten Blick gut aus, ich les mich mal ein :)
 
ich denke es ist wichtig zu sagen, dass hinter der Aussage "in Objective C senden die Objekite einander Nachrichten statt Methoden eines bestimmten Objektes aufzurufen" viel mehr steckt als just another C++ !

Sicher sieht die Syntax anders aus, aber es ist auch ein anderer Ansatz. Die Idee dahinter ist sehr spannend und sehr mächtig. Mir selbst hat immer die Zeit gefehlt um mich da reinzuknien, aber es lohnt sich wirklich. Nur weil die Syntax mal nicht C-like ist, sollte man Objective-C nicht ablehnen, denn das ist die Syntax von Ruby oder Python auch nicht wirklich. Die Syntax von Java sieht auch aus wie C++ und auch Java ist anders als C++. Syntax sollte man antizipieren, egal wie sie gerade ausgeprägt ist.
 
Mit der Argumentation kannst du diese Fähigkeit jeder Programmiersprache andichten.
Nein, weil etwa in C nichts, was irgendwie mit Bezeichnungen von Parametern zusammenhängt bei dem Aufrufer ankommt. Es gibt genau keine Verbindung.

Wenn die Parameter wirklich Namen hätten müsste man sie nicht zwei Mal in der Methodendefinition benennen(hat dann quasi 2 Namen andAnother und value in deinem letzen Beispiel).
Der zweite Teil ist für den Aufrufer "unsichtbar". Er deint lediglich der Bezeichnung des Parameters innerhalb der Methode. Daher dürfen auch in Deklaration und Definition verschiedene Bezeichnungen verwendet werden. Die andere Bezeichnung dient der Bezeichnung außerhalb der Methode, muss also vom Aufrufer akzeptiert werden.

Und tatsächlich sind die beiden häufig gleich. Aber nicht immer: etwa dann, wenn der Bezeichner innerhalb der Klasse bereits besetzt ist und daher nicht noch einmal als Paramtername (intern) herhalten kann. Accessoren sind so ein Beispiel und Initiliasierer.

Code:
@interface MyClass {
    NSString*   name;
}
…
@end

@implementation
- (id)initWithName:(NSString*)initName {
…
}
Was du wahrscheinlich meinst, ist, dass man nicht die Parameter selbst "zuweisen" darf, wie man das aus anderen Programmiersprachen kennt. VB bietet das etwa. Das sähe dann so aus:
Code:
- (void)aMethodWithParamter:(NSString*)param another:(int)value …
…
//  eh klar
[self aMethodWithParameter:@"Negm" another:9811];
// aber auch
[self aMethodWithAnother:9811 Parameter:@"Negm"];
Das geht in der Tat nicht.
Aber alleine der Gedanke, darauf zu kommen, zeigt ja, dass man die Bezeichnungen dem Parameter zuordnet und nicht der Methode "an sich".

Aber es ist wirklich müßig, darüber zu diskutieren.
 
@pdr2002:
Smalltalk kenne ich ebenso wie Objective-C nicht. Ich weigere mich aber, auf einem System was mir gefällt eine Alternativsprache zu nutzen (z.B. Java oder C++, von Basic reden wir mal besser nicht), aus diesem Grund will ich mir Objective-C einmal näher ansehen - zumal es die Entwicklungstools kostenlos dazu gibt.
Das ist schlau. Man hat zwar die zusätzliche Mühe des Lernens (was aber an sich ja auch schon ein Vorteil ist). Allerdings rechnet sich das ziemlich schnell, wenn man bedenkt, dass meist eine Sprache optimal unterstützt wird.
 
Nein, weil etwa in C nichts, was irgendwie mit Bezeichnungen von Parametern zusammenhängt bei dem Aufrufer ankommt. Es gibt genau keine Verbindung.
Und was genauso soll die zusätzliche Verbindung bei ObjC sein?

Ich habe sowohl bei C als auch bei ObjC eine Funktion mit einem Namen, der ich in vorgegebener Reihenfolge Parameter übergebe ich sehe da so ziemlich genau keinen Unterschied. Das ist einzig und allein ein syntaktischer Unterschied.

Und wie würdest du den Aufruf von ObjC-Methoden über PyObjC einordnen? Das sieht ungefähr so aus:
Code:
Objc:
[object methodWithParameter: a andAnother: b]
Python:
object.methodWithParameter_andAnother_(a,b)
Sind die Parameter jetzt auf einmal nicht mehr benannt?

Aber alleine der Gedanke, darauf zu kommen, zeigt ja, dass man die Bezeichnungen dem Parameter zuordnet und nicht der Methode "an sich".
Dafür ist es ja vermutlich gedacht. Damit man(idealerweise) weiß wozu die Parameter da sind und was sie sind ohne in die Doku gucken zu müssen. Trotzdem gehört das zur Funktion.

ObjC: „Hallo Programmierer ich möchte erst die Äpfel, dann das Mehl und zuletzt die Milch.“
„echte“ benannte Parameter: „Hallo Methode hier hast du Mehl und Milch und zuletzt noch die Äpfel.“

Ein besseres Beispiel ist mir da auf die Schnelle nicht eingefallen um den Unterschied zu verdeutlichen. ;)

Aber du hast vermutlich recht, das führt zu nichts außer vom Thema weg.
 
Zuletzt bearbeitet:
Ich hab auch mit Basic angefangen. Aber ich häng nicht dran. :Oldno:

Eben. Man entwickelt sich ja weiter.

Bei mir ging es auch von Basic (C64) über Assembler zu "Höherem". Das waren in der Folge Pascal, Forth, C, Modula-2, und so ging das dann weiter.

Aber die Frage war ja nicht, womit wir angefangen haben, sondern womit man heute Programmieren lernt. :)
 
Und was genauso soll die zusätzliche Verbindung bei ObjC sein?

Ich habe sowohl bei C als auch bei ObjC eine Funktion mit einem Namen, der ich in vorgegebener Reihenfolge Parameter übergebe ich sehe da so ziemlich genau keinen Unterschied. Das ist einzig und allein ein syntaktischer Unterschied.
Ja. Es ist ein syntaktischer Unterschied.

Und wie würdest du den Aufruf von ObjC-Methoden über PyObjC einordnen? Das sieht ungefähr so aus:
Code:
Objc:
[object methodWithParameter: a andAnother: b]
Python:
object.methodWithParameter_andAnother_(a,b)
Sind die Parameter jetzt auf einmal nicht mehr benannt?
Selbstverständlich nicht.

Dafür ist es ja vermutlich gedacht. Damit man(idealerweise) weiß wozu die Parameter da sind und was sie sind ohne in die Doku gucken zu müssen. Trotzdem gehört das zur Funktion.
? Ich habe nicht bestritten, dass sie ein Teil des Methodennamens sind. Ich habe sogar gesagt, dass sie einen Teil des Methodennamens bilden.

Ich erkenne darin allerdings keinen Widerspruch.

ObjC: „Hallo Programmierer ich möchte erst die Äpfel, dann das Mehl und zuletzt die Milch.“
„echte“ benannte Parameter: „Hallo Methode hier hast du Mehl und Milch und zuletzt noch die Äpfel.“

Ein besseres Beispiel ist mir da auf die Schnelle nicht eingefallen um den Unterschied zu verdeutlichen. ;)
Kein Problem, weil ich dazu schon geschrieben hatte. Fehlet aber in deinem ZItat.

Aber du hast vermutlich recht, das führt zu nichts außer vom Thema weg.
Jepp
 
wär mir auch lieb wenn Ihr wieder die Kurve hin zum Topic bekämt ;)
 
Da er Java angucken wollte, hier mal ein kleiner Eclipse Java Workshop
http://www.admin-wissen.de/programmierung/eclipse-workshop/workshop-seite-1/

Noch ein kleines HelloWorld
http://seal.ifi.unizh.ch/fileadmin/...ormatik_I/WS04_05/Uebung/Eclipse-Tutorial.pdf
Ist mit Eclipse unter Windows erstellt worden. Da es aber Java ist, macht es keinen Unterschied. Die Eclipse Oberflaeche unterschiedet sich da kaum. Und Bei dem HelloWorld gibts eigentlich garkeinen Unterschiede.

Hier gibts dann (Auf Seite 6) HelloWorld mit SWING. So grafisch und so. bye bye Konsole! :)
http://www.admin-wissen.de/programmierung/eclipse-workshop/workshop-seite-6/

Und hier findest du ebenfalls einen kleine Liste von Tutorials zu den verschiedensten Sprachen/Anwendungen
http://wiki.winf.at/Tutorials

Besonders gut sind die GalileoBuecher: http://www.galileocomputing.de/openbook/javainsel6/ (auch als Download)

Und noch ein JavaBuch http://www.javabuch.de/

Java Sourcen und FAQ, Tutorials
http://java.sun.com/docs/books/tutorial/
http://java.sun.com/docs/books/tutorial/uiswing/ (Trail: Creating a GUI with JFC/Swing)

Ansonsten einfach mal GoogleFragen. Oder mich per PM wenn Du, oder irgendwer anders, noch Fragen hat.

mfg Carsten
 
Zuletzt bearbeitet:
Zurück
Oben Unten