30 votes

Comment programmez-vous différemment dans les langues dynamiques?

Comment quelqu'un qui sait vraiment comment tirer parti de la dynamique des langages de programmation approche de programmation différemment de quelqu'un qui travaille dans un langage statique?

Je suis familier avec tout le débat sur la statique versus dynamique de frappe, mais ce n'est pas ce que je suis à la. J'aimerais discuter de techniques de résolution de problèmes pratiques dans la dynamique des langues, mais pas en statique langues.

La plupart du code que j'ai vu écrit dans des langages de programmation dynamiques n'est pas très différente de celle du code écrit en statique langages de programmation. Comme le dit le proverbe, vous pouvez écrire FORTRAN dans n'importe quelle langue, et beaucoup de gens le font. Mais certaines personnes utilisent des langages de programmation dynamiques pour résoudre les problèmes d'une manière qui ne serait pas facile à traduire, par exemple, C++. Quelles sont certaines de leurs techniques?

Quelles sont les bonnes ressources qui expliquent comment utiliser la programmation dynamique des langues? Pas de livres sur la syntaxe de la langue ou de la référence de l'API, mais les ressources sur les méthodes de résolution de problème que de profiter de la dynamique des compétences de langue.

EDIT (1/5/2009): j'apprécie les réponses ci-dessous, mais ils ne semblent pas compte de l'énorme augmentation de la productivité de langage dynamique avocats disent-ils de l'expérience.

9voto

Daniel Lemire Points 812

J'aime le slim de la réponse. Je dois passer un temps fou en Java et C++ objet personnalisé structures de données qui sont juste libre en Python/Ruby. Et de l'artisanat des fonctions spécialisées pour traiter les structures de données. Oui, en C++, STL est vraiment sympa. Oui, les médicaments Génériques en Java sont gentils. Ils aident à créer des structures de données beaucoup plus rapide, cependant, ils nécessitent beaucoup de réflexion et de considération.

Cependant, il n'y a plus de raison fondamentale de la dynamique des langues sont plus faciles à travailler avec. C'est une profonde idée de ce qui est appelé le duck-typing. Certains commentaires ci-dessus se réfèrent à duck-typing, mais s'il vous plaît prendre le temps de réfléchir sur ce duck-typing est. C'est une façon fondamentalement différente de voir le monde. Un point de vue qui est incompatible avec des langages comme Java et C++.

Duck-typing signifie que vous perdez pas de temps à définir ce qu'est un canard est. En n'ayant pas à définir formellement vos objets que vous économiser beaucoup de temps et d'énergie. Obtenir les définitions de droite est dur. Jetez un oeil à ce blog de la mine où je donne des exemples: définitions Formelles sont moins utiles que vous ne le pensez

Duck-typing est extrêmement utile. Le "Doit Ignorer le" principe du XML est ce qui a fait de XML de manière significative et utile sur le web. Mais c'est juste un exemple de duck-typing.

Une autre façon d'exprimer le duck-typing est par le Web mantra "Être rigoureux dans ce que vous envoyez, généreux dans ce que vous acceptez". C'est aussi une très idée fondamentale.

Enfin, vous pouvez revenir à un long billet de blog de la mine où j'explique duck-typing et comment il se rapporte à des choses comme l'IA et de la modélisation: Duck-Typing, l'Intelligence Artificielle et de la Philosophie

4voto

chaos Points 69029

D'une manière général, je me retrouve profitant de la dynamique des langages de programmation est dans la simplification et la clarification de la syntaxe. Si je suis représentant d'une base de données, par exemple, la syntaxe que j'utilise pour interagir avec elle, peut être beaucoup plus propre si je peux charger dynamiquement des propriétés et des méthodes sur l'objet de base de données pour les tables, les tables et les lignes de leurs colonnes, et ainsi de suite. La différence peut-être entre:

$row = $db->getTable('user')->getRow(27);
$row->setValue('name', 'Bob');

et

$row = $db->user->getRow(27);
$row->name = 'Bob';

Le " bruit visuel à l'épargne de la deuxième forme commence vraiment à ajouter jusqu'à quand vous êtes en train de faire des choses complexes.

3voto

Bahaa Zaid Points 894

Les langages dynamiques peuvent changer l'objet au moment de l'exécution, vous pouvez ajouter des méthodes, des propriétés ...

Un bon exemple de la magie des langages dynamiques est cet extrait de code Groovy qui appelle une méthode sur un service Web en seulement deux lignes de code:

 def proxy = new SoapClient("http://localhost:6980/MathServiceInterface?wsdl");
def result = proxy.add(1.0, 2.0);
 

Voici un autre extrait Groovy qui extrait des données de XML:

 def contacts = new XmlParser().parseText("<contacts><name>Bahaa Zaid</name></contacts>");
def myName = contacts.name[0].text();
 

Vous ne pouvez pas le faire dans les langages statiques. Dynamic Language peut modifier les objets pour refléter la condition d'exécution réelle.

2voto

David Thornley Points 39051

Dans les langages dynamiques, je suis plus expérimental. Il est plus facile de changer les choses à la volée, je peux donc explorer des solutions plus rapidement.

Si je sais ce que je veux faire, et généralement comment le faire, j'aime C ++. Si je ne sais pas comment faire ce que je veux faire et que je ne suis probablement pas tout à fait sûr de ce que je veux faire, je préfère de loin Lisp.

2voto

J.T. Hurley Points 493

Les itérations rapides rendent les programmeurs plus heureux et ne viennent pas plus vite qu'un interprète interactif. Une bonne exploitation de l'interpréteur vous permet en même temps de réaliser des tests sandbox, des tests et des prototypes.

Attention toutefois à la programmation par permutation. Ma règle d'or personnelle est que ce n'est pas parce que cela fonctionne que cela est prêt, lorsque vous pouvez expliquer pourquoi cela fonctionne, il est prêt.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X