Frage

In den letzten paar Monaten habe ich einen Übergang von Java zu Groovy machen und ich kann viele Vorteile schätzen es bringt: weniger Code, Verschlüsse, Builder, MOP, dass am Ende Framework wie Grails möglich macht, die Leichtigkeit, mit spöttisch, wenn Schreiben von Tests etc.

Allerdings habe ich „beschuldigt“ durch meine Mitarbeiter, dass mein Code nicht stark genug ist. Das heißt, erkläre ich noch Typen für meine Parameter und Felder, neigen dazu, Vererbung und Polymorphismus zu verwenden, anstatt Ente eingeben usw. Es scheint mir, dass es in diesen Situationen nicht nur dynamische oder statische, sondern auch dynamische vs. objektorientierte Paradigma Art von Dilemma. In den Fällen, neige ich dazu noch OO bevorzugen. Ich fühle, dass OO Paradigma großen Wert in seiner grundlegende Prämisse hat man abstrahieren in ermöglicht und beziehen sich Ihren Code-Konstrukte auf bestimmte reale Konzepte.

So, hier sind insbesondere Fragen, die ich brauche Hilfe mit:

  1. Soll ich erklären Typen für meine Parameter, Felder, etc?

  2. Soll ich Codeblock als Verschluss erklären, wenn einfache Methode tun?

  3. Wann soll ich Ente eingeben statt polymorphe dynamische Dispatch verwenden. Zum Beispiel in groovy kann ich Tier tun „$ action“ () oder def Tier. animal.action () anstelle von Tiere Tier = new Hund (); animal.action (). Ich kann das Problem mit dem ersten im Rahmen des Open-Closed-Prinzips sehen, aber aus anderen Gründen OO Stil Polymorphismus?

  4. bevorzugen
  5. Wann soll ich Schnittstellen in groovy verwenden (wenn überhaupt)?

Ich bin sicher, dass es einige andere ähnliche Dilemmas ich nicht aufschreiben. Ich denke auch, dass diese Fragen gelten nicht nur für stark, aber für jede andere dynamische Sprache. Was ist Ihre Meinung?

War es hilfreich?

Lösung

0,1. Soll ich Typen deklarieren für meine Parameter, Felder, etc?

neige ich dazu, Arten auf Klassen deklariert werden, die als Teil einer öffentlichen API verwendet werden, Dinge, die anderen Entwickler werden eine Menge verbrauchen, oder wo ich einige zusätzliche Hilfe zum automatischen Vervollständigung von IntelliJ möchte. Ansonsten Ich def 'Dinge.

0,2. Soll ich Codeblock als Verschluss erklären, wenn einfache Methode tun?

Ich benutze Methoden, wenn es etwas, was ich auf, das um als Variable planen. Auch wenn es das ist „foo. & Bar“ Methode Dereferenzierungsoperator, die meisten Entwickler nicht wissen, über dieses und werden durch sie verwirrt, wenn sie über sie laufen. Ich benutze auch Verschlüsse, wenn es ein kleines Stück Code, das klar ist, in einem größeren Verfahren zu bleiben, anstatt zu beschreibenden Zwecken in einem eigenen Verfahren zu setzen.

0,3. Wann soll ich Ente eingeben anstelle von polymorpher dynamischer Dispatch. Zum Beispiel in groovy kann ich Tier tun „$ action“ () oder def Tier. animal.action () anstelle von Tiere Tier = new Hund (); animal.action (). Ich kann das Problem mit dem ersten im Rahmen des Open-Closed-Prinzips sehen, aber aus anderen Gründen OO Stil Polymorphismus bevorzugen?

ich nur das Tier verwenden. „$ Action“ () bilden, wenn ich das Dereferenzierungsebene muß, weil der Methodenname auf dem Code-Ausführungspfad (meist während der schweren metaprogramming) unterschiedlich ist. Ich benutze Tier Tier = new Hund (); animal.action (), wenn ich die IDE Hilfe mit Auto-Vervollständigung will, oder das Niveau der Dokumentation ist hilfreich für die Klarheit des Codes (und nicht durch die zusätzliche verboseness verletzt, die offensichtlich oder beschränkende sein könnten).

0,4. Wann soll ich Schnittstellen in groovy verwenden (wenn überhaupt)?

ich sie sehr selten verwenden. Ich konnte sehen, wie sie vor allem als Dokumentation der erwarteten Felder für einen öffentlichen API-Aufruf oder möglicherweise als Marker-Schnittstelle, um einen Satz von Klassen voneinander zu unterscheiden von einer metaprogramming Perspektive. Sie sind sehr viel weniger nützlich in groovy, als sie in Java sind.

Andere Tipps

Dies ist nicht immer eine populäre Meinung, aber ich denke, dass die explizitere und Ihr Code löschen sein kann, desto besser.

Ich mag nicht Konstrukte, die Sie lassen nur raten, was los ist ...

Ich arbeitete ein Jahr lang in Ruby und hat es nicht gefallen. Ich sage nicht, dass es keine Orte hat, wo es zeichnet, ich sage nur, dass Ich mag wirklich die Dinge sauber zu halten und explizite und habe nicht das Gefühl, dass Ruby hatte, dass als Ziel.

Eine Sache, die ich sicher herauszufinden, haben - die Höhe der Eingabe Sie nicht auf die Gesamtentwicklungsgeschwindigkeit nicht gleichzusetzen. Es ist wahr, dass eine komplizierte Code-Basis mit vielen wiederholten Code für sehr langsame Entwicklung macht, sondern einfach zu reduzieren, was Sie eingeben, ohne die Beseitigung der Vervielfältigung nutzlos ist, und mehr eingeben, klarer, deutlicher Code im Allgemeinen geht, schneller zu sein (über die Länge des Projektes) als der gleiche Code in einer knappen geschrieben, weniger formalen Sprache.

Wenn Sie nicht glauben, dass die Eingabe keine Beziehung zur Entwicklungsgeschwindigkeit hat, lassen Sie das nächste Mal, wenn ein Projekt die Anzahl der Codezeilen und dividieren durch den Mann-Tage verbrachte (einschließlich Debuggen und Testen) zählen. Mit anderen Worten, wie vielen Code wurde einen Tag eingegeben hat. Sie finden das Ergebnis finden eine sehr kleine Zahl zu sein -. Tatsächlich Code eingeben ein sehr kleiner Teil eines Software-Projektes ist

Ich denke, mit Groovy sollten Sie die einfachste Möglichkeit, etwas zu tun bevorzugen, und fallen wieder nur auf den groovier Funktionen, wenn die Situation es erfordert. (Wie, wenn Makros oder das Erstellen von Multimethoden in Clojure schreiben, wenn Sie sich für diese Tools zu erreichen finden viel Sie selbst in Frage stellen sollen.) Ihr vorsichtiger Ansatz scheint mich gut, möglicherweise Ihre Mitarbeiter sind ein wenig berauscht mit ihrer neugewonnenen Macht . (Es wäre nicht das erste Mal.)

Die gute Sache über eine flexible Sprache wie Groovy, die ist, dass Sie mit dem vorsichtigen Ansatz beginnen können, wie Sie wissen, dass Sie favorisieren leistungsfähigeren Alternativen zurückgreifen, wenn Sie sie benötigen. Wissen Sie „die einfachste Sache, die möglicherweise funktionieren könnte.“

Insbesondere bevorzugen Duck Typing über Schnittstellen und stört nicht mit Typen von Parametern scheint, wie es eine gute Sache sein könnte, kann es macht es viel einfacher Mocks Tests zu liefern.

Es kommt darauf an, was die Menschen sind bequem mit. Ich mag Typen declerations verwenden und Methodenaufrufe, weil ich in Java bequem bin. Der Code, den ich muß schreiben von Menschen mit aus vieler dynamischen Programmierung Erfahrung gehalten werden, damit ich es in dem normalen Java-Code der Nähe halten, es wäre denn es ein guter Grund ist eine fortschrittliche groovy Funktion zu nutzen. Es klingt wie Ihre Gruppe sollte Coding-Standards erstellen, die versuchen zu erklären, wenn Besonderheiten von Groovy allgemein verwendet werden sollen.

Es gibt zwei dominante Arten von objektorientierten Sprachen.

Die Sprachen, in der Simula 67 Familie, wie C ++ und Java, favorisieren-statisch typisierte Variablen, Compiler und Linker und Verfahren vtables.

Die Sprachen in der Smalltalk Familie, wie Ruby, favorisieren-dynamisch typisierte Variablen, Interpretation und Message-Passing statt funktions Zeiger-Tabellen.

Beide sind objektorientiert, aber ganz anders nimmt das Konzept der Objektorientierung.

YES

-

NO

Haben Sie erkennen, dass es für diese Frage keine wirkliche Antwort ist?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top