2 Stimmen

Sprach-Portierbare Beispielprogramme

Zurzeit lerne ich Objective-C 2. Mir ist bekannt, dass es von Mac-Entwicklern stark genutzt wird, aber ich bin mehr daran interessiert, die Sprache zu lernen als die Frameworks für die Entwicklung auf Mac OS X/iPhone (außer Foundation) zu diesem Zeitpunkt. Um dies zu tun, möchte ich ein paar mittlere* Konsolenanwendungen schreiben, aber mir fehlen Ideen.

Die meisten Beispiele sind in der Art von "Schreiben Sie eine Bruchklasse, die Getter/Setter und eine Druckfunktion hat", was nicht sehr herausfordernd ist, wenn man aus einer C++-Umgebung kommt. Ich hätte gerne einige generische Beispiele von Programmen, aber ich möchte nicht, dass sie irgendwelche Implementierungsdetails von Objective-C enthalten. Ich möchte das Programmstruktur herausfinden/eigene Schnittstellen schreiben und die Sprache von dort aus lernen.

Zusammenfassend: Ich frage mich, welche Beispielanwendungen Objective-C-Programmierer empfehlen würden, um die Sprache zu erkunden.

Ein Beispiel für eine "mittlere" Anwendung wäre etwas in der Art von "Schreiben Sie ein Programm, das eine URL von der Befehlszeile nimmt und die Anzahl der Vorkommen eines bestimmten Wortes in den zurückgegebenen Daten zurückgibt:

Beispiel -url www.google.com -Wort suchen

2voto

Arkaaito Punkte 7249

"Project Euler" ist eine Standardantwort für diese Art von Dingen, aber ich habe das Gefühl, dass du weniger daran interessiert bist, dir sagen zu lassen, algorithmische Dinge umzusetzen (da dieses Wissen leichter zwischen Sprachen zu übertragen ist) und mehr daran interessiert bist, Miniprojekte durchzuführen, die dich mit den Kernbibliotheken vertraut machen. Ist das fair?

Wenn ja, meiner Meinung nach solltest du die Grundlagen dessen kennen, wie man folgendes mit den Standardbibliotheken der Sprache macht, die du für ernsthafte Arbeit verwenden möchtest:

  1. Standard IO
  2. Netzwerk-IO
  3. Datei-IO und Navigation im Dateisystem
  4. Regexp-Dienstprogramme
  5. Strukturierte Daten (XML-Bibliotheken und CSV-Bibliotheken, wenn sie vorhanden sind)

Programmieraufgaben, die ich für diese empfehlen würde:

  1. Es hört sich an, als hättest du das bereits gemacht.
  2. Ein sehr einfacher Proxy - etwas Ähnliches wie das, was du in deinem Beitrag beschrieben hast, aber der auf einem Port auf eine Nachricht wartet, die eine URL enthält, anstatt sie über die Befehlszeile entgegenzunehmen, und ebenso die Ergebnisse an das zurückgibt, was es über das Netzwerk kontaktiert hat, anstatt sie auf stdio auszugeben. [Natürlich müssen Sie die Maschine für dies hinter einer entsprechenden Firewall haben!]
  3. Etwas, das einen Verzeichnispfad nimmt und rekursiv die Anzahl der Zeilen berechnet, die seine Kinder enthalten. (Also, holen Sie sich das Verzeichnislisting, öffnen Sie jede Kinddatei und zählen Sie die Anzahl der Zeilenumbrüche. Öffnen Sie dann jedes seiner Kinderverzeichnisse, holen Sie sich deren Listings, ...) Protokollieren Sie auf vernünftige Weise auftretende Fehler (z.B. keine Leseberechtigungen). Schreiben Sie die endgültigen Ergebnisse in die im bereitgestellten Verzeichnis enthaltene Datei.
  4. Gewöhnlich stoße ich, wenn ich genug in einer Sprache herumwerkeln, auf ein Problem, bei dem ich mich natürlich dazu neige, Reguläre Ausdrücke zu verwenden. Ich gehe davon aus, dass es bei dir genauso der Fall ist und verschiebe dieses Element vorerst.
  5. Holen Sie sich StackOverflow.com und [legen Sie es in ein DOM-Modell und navigieren Sie darin], um festzustellen, ob diese Frage immer noch auf der Startseite steht.

2voto

Johannes Rudolph Punkte 34512

Ich habe das Beste aus Objective-C herausgeholt, indem ich es mit einem Test-Framework erkundet habe. Ich habe einen kurzen Blog-Beitrag dazu geschrieben. Du solltest dich auch mit den Speicherverwaltungsrichtlinien von Objective-C auseinandersetzen, das Zählen von Referenzen braucht etwas Zeit, um sich daran zu gewöhnen, funktioniert aber sehr gut, wenn Verantwortlichkeiten klar abgegrenzt sind (darüber habe ich auch auf meinem Blog geschrieben).

Indem ich meine Hände mit einem Test-Framework schmutzig gemacht habe (im konkreten Fall GHUnit), konnte ich weit mehr über die Sprache lernen, als ich es auf "traditionelle" Weise gekonnt hätte. Natürlich brauchst du ein kleines Testprojekt, ansonsten macht dieser Ansatz keinen Sinn.

Ich glaube nicht, dass dein Beispiel eine sehr gute Idee ist, da es dich zwingt, mit http-Verbindungen, Ressourcen usw. herumzuspielen, was schließlich etwas frameworkspezifisch ist. Das Parsen einer Textdatei wäre in dieser Hinsicht etwas einfacher. Die Verwendung eines Unit-Test-Frameworks hat für dich folgende Vorteile:

  • Erfahren über plattformspezifische Build-Systeme und Bereitstellungsdetails
  • Gezwungen, Komponenten auf eine locker gekoppelte Weise von Grund auf zu entwickeln
  • dadurch einzigartige Mechanismen der Sprache zu erkunden, die möglicherweise neue oder bekannte Muster überflüssig machen (z.B. machen Kategorien die Dependency Injection überflüssig usw.)
  • schneller Kompilier-Test-Zyklus, weniger Zeit vor dem Debugger verbracht
  • kombiniert mit Versionskontrolle: schmerzfreie Experimente

Du solltest dich auch mit der Implementierung des Test-Frameworks befassen, da Test-Frameworks immer in gewisser Weise mit Metadaten arbeiten müssen. Test-Frameworks werden oft zusammen mit Isolations-Frameworks verwendet. Sie erstellen im Grunde genommen Objekte zur Laufzeit, die bestimmten Schnittstellen entsprechen und als Platzhalter für konkrete Objekte fungieren. Das Studium ihrer Implementierung wird dich über die Laufzeitmanipulationen, die in Objective-C durchgeführt werden können, informieren (Stichwort: Method-Swizzling)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X