Ich habe früher viel Webprogrammierung in Rails (PHP davor) gemacht, bevor ich angefangen habe, Computertechnik zu studieren.Ermüdet von nicht-semantischen Tests, um dynamische Typisierungsvorschläge wettzumachen?
Seitdem habe ich viel in der Schule in C gearbeitet und einige persönliche Dinge in Objective-C (Mac-Zeug). Ich habe gelernt, statische Typisierung zu lieben.
Aber jetzt muss ich eine professionelle Webentwicklung (Freelancing) machen und habe Rails wieder abgeholt. Ich finde es wirklich ärgerlich, nicht-semantische Typprüfungen zu schreiben. Ich habe diese kostenlos von C- und Objective-C-Compilern bekommen. Ich habe es geliebt, Build zu treffen und das System alle meinen Code überprüfen zu lassen, um zu sehen, dass A B anrufen kann, B irgendeine obskure Bibliothek C usw. anrufen kann. Alles, was ich tun musste, war, die Semantik zu testen. Aber mit Rails bin ich der Compiler. :(
Hat jemand diesen gleichen Weg beschritten sind meine einzigen Optionen für Web-Entwicklung ASP.NET MVC mit C# und Java + x Rahmen für einige Vorschläge Sehen, oder sogar eine gewisse Sympathie ...?:? P
Übrigens, ich mache einen speziellen Verweis auf Rails und nicht auf Ruby, weil ich Rubys dynamische Natur für einfache Sachen wie Scripting oder was auch immer nicht mag, aber da Rails auf so viele Edelsteine angewiesen ist und da man normalerweise eine Menge anderer Edelsteine hinzufügt die dynamische Typisierung, wird ein Problem
Dank
edit:.!
Ich folgte auf Vorschlag von Pst und schaute in Scala. Als ich das Buch Programming in Scala las, geschrieben von dem Autor der Sprache, Martin Odersky, stieß ich auf diesen Text, der in vielerlei Hinsicht meine Bedenken und ein bisschen mehr ausdrückt. Sehr interessante Lektüre.
ab Seite Taken 52 von Martin Odersky der Programmierung in Scala:
Scala statisch
Ein statisches Typsystem klassifiziert Variablen und Ausdrücke nach die Arten von Werten eingegeben wird sie halten und berechnen. Scala ist eine Sprache mit einem sehr fortgeschrittenen statischen Typ System. Ausgehend von einem System von geschachtelten Klassen Typen wie Java, ermöglicht es Ihnen, Typen mit Generika zu parametrisieren, um Typen mit Kreuzungen zu kombinieren, und Details von Typen mit abstrakten Typen ausblenden. Diese geben eine starke Grundlage für den Aufbau und Komponieren Sie Ihre eigenen Typen, so dass Sie Schnittstellen entwerfen können, die bei gleichzeitig sicher und flexibel zu verwenden sind.
Wenn Sie dynamische Sprachen wie wie Perl, Python, Ruby oder Groovy, Sie könnte es ein wenig seltsam, dass Scala statischen Typ System als eine seiner Stärken aufgeführt ist. Nach alle, das Fehlen eines statischen Typs System wurde von einigen als Hauptvorteil der dynamischen Sprachen zitiert. Die häufigsten Argumente gegen statischen Typen sind, dass sie Programme zu ausführlich, verhindern Programmierer von sich selbst auszudrücken , wie sie wollen, und machen unmöglich bestimmte Muster dynamischer Modifikationen von Software-Systemen machen.
aber oft sind diese Argumente nicht gehen gegen die Idee der statischen Typen in allgemeinen, sondern gegen bestimmte Art Systeme, die wahrgenommen werden, zu ausführliche oder zu unflexibel zu sein. Für Beispiel, Alan Kay, der Erfinder der Smalltalk Sprache, einmal angemerkt: "Ich bin nicht gegen Typen, aber ich weiß nicht von Systeme, die keine komplette Schmerzen sind, so dass ich immer noch mag dynamische typing „
Wir hoffen, dass Sie in diesem Buch zu überzeugen dass Scala Typ-System weit von ist ein Wesen‚vollständiger Schmerz‘in der Tat, es Adressen schön zwei der üblichen Bedenken über statische Typisierung..: Ausführlichkeit wird durch Typ Inferenz vermieden und Flexibilität wird gewonnen durch Mustererkennung und mehrere neue Möglichkeiten zum Schreiben und Verfassen von Typen. Mit diesen Hindernissen aus dem Weg, die klassischen Vorteile der statischen Systeme können besser geschätzt werden. Zu den wichtigsten von diesen Vorteile sind überprüfbare Eigenschaften von Programm Abstraktionen, sichere Refactorings, und besser Dokumentation.
prüfbare Eigenschaften
Statische Typsysteme können die Fehlen bestimmter Laufzeitfehler beweisen. Zum Beispiel können sie Eigenschaften wie beweisen: booleans sind nie zu ganzen Zahlen hinzugefügt; auf private Variablen wird nicht von außerhalb ihrer Klasse zugegriffen; Funktionen werden auf die richtige Anzahl von Argumenten angewendet; Nur Strings werden jemals zu einem Satz von Strings hinzugefügt.
Andere Arten von Fehlern werden von heutigen statischen Systemtypen nicht erkannt. Für Instanz werden sie normalerweise keine nicht abschließenden Funktionen, Array Grenzen Verletzungen oder Divisionen von Null erkennen. Sie werden auch nicht erkennen, dass Ihr Programm nicht mit seiner Spezifikation übereinstimmt (vorausgesetzt, es gibt eine Spezifikation, das ist!). Statische Systeme wurden daher von einigen als nicht sehr nützlich abgetan. Das Argument geht, dass solche Typ Systeme nur einfache Fehler erkennen können, während Unit-Tests bieten umfangreichere Abdeckung, warum mit statischen Typen überhaupt kümmern? Wir glauben, dass diese Argumente den Punkt verfehlen.Obwohl ein statischer Typ System kann sicherlich nicht Einheit Tests ersetzen, kann es die Anzahl der Einheit Tests reduzieren, die durch die Pflege von einige Eigenschaften, die sonst müssen getestet werden müssen. Ebenso kann die Einheit Testen die statische Typisierung nicht ersetzen. Schließlich, wie Edsger Dijkstra sagte, Tests können nur das Vorhandensein von Fehler beweisen, nie ihre Abwesenheit. So garantiert die , dass statische Typisierung gibt kann einfach sein, aber sie sind echte Garantien einer Form keine Menge von Tests liefern kann.
Sicher Refactorings
Ein statisches Typsystem bietet ein Sicherheitsnetz, das Sie Änderungen mit einem hohen Maße an Vertrauen auf eine Code-Basis machen kann. Stellen Sie sich zum Beispiel ein Refactoring vor, das einen zusätzlichen Parameter zu einer Methode hinzufügt. In einer statisch typisierten Sprache können Sie die Änderung vornehmen, Ihr System neu kompilieren und einfach alle Zeilen beheben, die einen Typfehler verursachen. Sobald Sie damit fertig sind, haben Sie sicher alle Orte gefunden haben, die geändert werden müssen. Dasselbe gilt für viele andere einfache Refactorings wie Ändern eines Methodennamens oder Verschieben von Methoden von einer Klasse in eine andere. In alle Fälle eine statische Typüberprüfung bieten genug Sicherheit, dass das neue System funktioniert genau wie das alte.
Dokumentation
Statische Typen sind Programmdokumentation , die vom Compiler für Korrektheit überprüft. Im Gegensatz zu einem normalen Kommentar, eine Art Anmerkung kann nie aus dem Datum sein (zumindest nicht, wenn die Quelldatei , dass es vor kurzem einen Compiler übergeben enthält hat). Darüber hinaus können Compiler und integrierte Entwicklungsumgebungen Typ Anmerkungen verwenden, um bessere Kontexthilfe bieten. Für Beispiel eine integrierte Entwicklungsumgebung können alle Mitglieder für eine Auswahl von Bestimmung der statischen Typ der Ausdruck, auf dem die Auswahl alle Mitglieder diese Art hergestellt ist und Nachschlagen verfügbar angezeigt werden soll.
Haben Sie ein Beispiel haben, warum diese Art von Tests zeigt, notwendig ist, wenn Rails-Entwicklung zu tun? – zetetic
zetetic: Rails' eigene Testsuite hat inumerous Beispiele, wie https://github.com/rails/rails/blob/master/activerecord/test/cases/calculations_test.rb def test_count_with_too_many_parameters_raises assert_raise (Argument) {Account .zählen (1, 2, 3)} Ende https://github.com/rails/rails/blob/master/activerecord/test/cases/associations_test.rb def test_include_with_order_works assert_nothing_raised {Account.find (: Erste ,:: order => 'id',: include =>: firma)} assert_nothing_raised {Account.find (: first,: order =>: id,: include =>: firma)} end – Alexandre
Hat jemand versucht zu schreiben ASP MVC mit F #? – Gabe