web-dev-qa-db-fra.com

Le "code bas" est-il déclaratif par défaut?

Quelque chose qui a vraiment lieu dans ma peau récemment est que Salesforce utilise le terme "développement déclaratif" pour signifier "code bas" ou "code visuel".

Par exemple, - Cet article explique la différence entre la programmation impérative et déclarative , tout en faisant des affirmations que leur solution de "code basse" est déclarative (et donc supérieure).

Cependant, je ne suis pas sûr de pouvoir être d'accord avec cela ... dans la mise en œuvre, il semblerait beaucoup être une programmation impérative.

enter image description here

Je me trompe ici? Le remplacement du texte avec des formes est-il en quelque sorte effectué la procédure ci-dessus "déclarative"?

N'est-ce pas simplement un script de transaction dans de nouveaux vêtements?

11
NSjonas

TL; DR - Pour la plupart des gens "Code bas" signifie généralement "peu/pas de dactylographie" alors que "déclaratif" signifie quelque chose d'un peu différent. J'accepterais que ce que la Salesforce n'autorise pas "développement déclaratif".

Je suis également d'accord surtout avec les réponses de Robert, avec quelques petites différences. FWIW, les termes "impératif" vs "déclaratif" remonte à des langages de programmation précoce.

"Impératif" Les langages de programmation ont été utilisés pour décrire des langues qui imbriquent essentiellement ce que vous ferez au niveau de la machine, c'est-à-dire d'exécuter une liste de commandes comparées sur une valeur, attribuée une valeur à un emplacement de stockage, envoyé une valeur à un périphérique de sortie, etc. . Les déclarations ont été exécutées dans une séquence avec des points de branche et des conditions pour mettre en œuvre des boucles, si, ensuite, des structures d'autre, etc. Langues comme Fortran , COBOL , ALGOL , [~ # ~] c [~ # ~ ~] , et Pascal étaient tous impératifs. Ils étaient "impératifs" parce que vous avez spécifié Comment Le programme a fonctionné, parfois d'une manière qui correspondait très étroitement à ce qui s'est passé au niveau de la machine (I.E. C).

Les langages de programmation "déclaratif" étaient censés être plus abstraites et spécifié davantage quoi Vous avez voulu calculé et moins comment cela a été fait. Langues comme SNOBOL et prolog étaient ainsi. De telles langues ont généralement été interprétées car elles nécessitaient de gros moteurs de calcul sous lesquels il s'exécute. Plus tard, il est devenu courant de les compiler dans des images exécutables dans lesquelles le moteur de calcul est devenu une partie de l'image.

La dichotomie entre les deux termes échoue quelque peu depuis dans les deux cas, vous devez savoir comment les éléments du langage de programmation seront exécutés pour savoir comment vous devez construire votre programme.

Je n'ai pas programmé dans Salesforce, mais j'ai programmé [~ # ~ # ~ # ~ ~] , et c'est très similaire en apparence. Vous dessinez essentiellement des organigrammes avec des quantités relativement faibles de dactylographie. Cette approche remonte aux premières langues de programmation graphique qui appartenaient dans les années 1980. C'est "Code faible" dans le sens où vous passez plus de temps à faire glisser et à laisser tomber des formes et moins de temps de taper des déclarations de programmation. Je dirais que c'est toujours impératif car l'organigramme que vous construisez a les mêmes éléments qu'un langage de programmation impératif (séquence des instructions, valeurs informatiques, attribuant des valeurs, des points de branche, etc.).

Il existe des systèmes de programmation graphiques plus déclaratifs. J'utilise actuellement SnapLogic , un ipaas , qui me rappelle beaucoup de [~ # ~ # ~ # ~] ou snobol dans la façon dont vous devez penser à construire vos programmes. Il est agréable de ne pas avoir à spécifier certaines choses (c'est-à-dire en boucle sur une liste d'éléments de données, ce qui se produit implicitement), mais il peut être plus difficile de faire des choses qui sont, du moins pour moi, simples dans un plus impératif approcher.

En fin de compte, je suis d'accord avec Robert - la question importante est moins ", comment appelez-vous cela?" Et plus "Comme c'est facile de faire les choses?"

12
hrender

Je partage votre critique et je ne suis pas d'accord avec la réponse de Robert. Robert dit

La programmation déclarative indique à la machine quoi faire (plutôt que comment)

Dire à un ordinateur Que faire est essentiellement la même chose que de lui dire comment le faire. La seule différence est le "niveau" du langage de programmation. C'est le même paradigme.

L'essence de la programmation déclarative indique ce que vous voulez en conséquence plutôt que de fournir des étapes. Et cela est conforme à la définition de Wikipedia: l'absence d'une description de flux de contrôle.

Votre exemple graphique à partir de SF est en effet simplement un joli moyen d'exprimer le contrôle de flux, complet avec des déclarations et des boucles.

13
Martin Maat

programmation impérative s'inquiète de raconter une machine Comment d'accomplir une tâche, généralement en écrivant des instructions de langage de programmation individuelles. Il inclut également tous les appels de méthode où vous décrivez toujours essentiellement comment.

Programmation déclarative raconte la machine quoi à faire, puis laissez la machine à travailler Comment pour l'accomplir. SQL tombe dans cette catégorie, de même que Linq du framework .NET. Vous dites à la machine quoi les données souhaitées et fonctionnent comment récupérer ces données de la meilleure façon possible.

Les définitions exactes de ces termes ne sont pas utiles ici, car il est facile de croire que vous dites toujours la machine "Comment" d'accomplir quelque chose, quand il y a beaucoup de détails de mise en œuvre et de décisions prises sous la hotte (la réel Comment ) que l'utilisateur n'a pas besoin de ne pas se préoccuper.

La principale raison pour laquelle Salesforce appelle ce "déclaratif" est parce que cela implique des symboles visuels pour décrire un flux de travail d'entreprise et que vous n'avez pas besoin de compétences en programmation pour en créer un. Le moteur de flux de travail sous-jacent lit le flux de travail et travaille les instructions de la machine nécessaires pour l'exécuter.

12
Robert Harvey

À partir d'une perspective théorique, les langues "déclaratives" ne sont généralement pas complètes et sont utilisées dans des contextes où ce qui n'est pas nécessaire ni même contre-productif, par exemple lorsque vous devez prouver l'exactitude et ne pas vouloir rencontrer une variante de la Mort de problème.

Par exemple, les versions HTML et les anciennes Versions CSS étaient purement déclaratives ", il y a une position devant ce paragraphe" et les "titres" obtiennent une police plus grande ", qui suffit à afficher des informations, mais pas pour le traitement, alors JavaScript a été utilisé pour manipuler la structure du document d'un programme impératif.

Parce que le moteur de rendu interface toujours avec un arbre de document déclaratif, nous pouvons être certains que le rendu de la page prendra une durée finie - il n'ya aucun moyen d'écrire une page Web "boucle sans fin" avec uniquement HTML et CSS, et tout en étant Vous pouvez écrire une boucle sans fin en JavaScript, la seule chose que vous puissiez faire pour maintenir le moteur de rendu perpétuellement occupé consiste à nourrir de nouvelles modifications en continu.

En bas de la pile de logiciels Toutefois, la CPU doit toujours exécuter des instructions en séquence. Vous ne pouvez donc pas avoir une pile entièrement déclarative. Donc, chaque fois que vous avez quelque chose qui est déclaratif, c'est une couche que l'utilisateur interagit avec.

Il existe également des modèles de programmation "visuels" où le programme n'est pas nécessairement déclaratif, mais représenté graphiquement. Le nombre d'objets à l'écran est fini. Ils peuvent donc être enregistrés sur un format de fichier déclaratif "Il existe une boucle", mais pour réaliser la boucle et l'exécuter réellement que le fichier doit être compilé et, à un moment donné, nous avons encore besoin de Pour quitter le cadre déclaratif si nous voulons une langue complète Turing (les fichiers de source textuelle ont également une taille finie, mais peuvent décrire un programme qui ne se termine pas).

Il existe de nombreux cas d'utilisation dans lesquels un modèle purement déclaratif fonctionne et la sécurité acquise à partir des limitations en vaut la peine, mais qui est indépendante de la méthode d'édition utilisée.

4
Simon Richter