IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #101
    Expert confirmé
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    avril 2016
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : avril 2016
    Messages : 1 198
    Points : 5 089
    Points
    5 089
    Par défaut
    Citation Envoyé par Christian_B Voir le message
    En somme Haskell cache son jeu. La syntaxe par indentation est là pour rassurer ceux qui ne sont pas à l'aise avec les notations fonctionnelles (ce qui est assez paradoxal pour un langage fonctionnel ).
    À mon avis, la syntaxe par indentation est là pour ceux qui la trouvent plus lisible.

    La syntaxe avec les point-virgules et les accolades n'est vraiment nécessaire que pour deux choses :
    • mettre plein de chose sur une seule ligne et
    • pouvoir générer plus facilement du code Haskell par programme.


    Citation Envoyé par Christian_B Voir le message
    Pour Python c'est moins clair. La notation "(x if x > 100 else x*2)" m'apparaît très illogique avec une valeur au début et une à la fin. Et pas même proche d'une tournure du langage naturel.
    Mais elle me suggère une question. Est-ce que les parenthèses utilisées comme délimiteurs d'expressions sont propres à if, ou est-ce que toutes les instructions (ou la plupart) peuvent être considérées comme des fonctions et imbriquées de cette façon ?
    Il y a deux cas où on utilise le mot-clef if :

    N'importe quelle expression peut être entourée par des parenthèses. Par exemple, voici une expression équivalente à la précédente :
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    (x if ((x) > (100)) else (((x*2))))
    Un cas d'utilisation des parenthèses autour des expressions est d'avoir des expressions sur plusieurs lignes. Par exemple, dans PEP 8, on peut lire l'exemple :
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    income = (gross_wages
              + taxable_interest
              + (dividends - qualified_dividends)
              - ira_deduction
              - student_loan_interest)
    Sans ces deux parenthèses, l'interpréteur croirait que la première ligne affecte gross_wages à income.

    Il n'y a pas que if qui peut être utilisé dans une expression. Par exemple, voici une expression avec for :
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    [x**2 for x in range(1,11)]
    Cette liste vaut [1, 4, 9, 16, 25, 36, 49, 64, 81, 100].

  2. #102
    Membre extrêmement actif

    Profil pro
    Grand Timonier des Chats
    Inscrit en
    décembre 2011
    Messages
    879
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Grand Timonier des Chats

    Informations forums :
    Inscription : décembre 2011
    Messages : 879
    Points : 3 306
    Points
    3 306
    Par défaut
    L'indentation pour la lisibilité est une norme depuis le LISP au moins. Ce n'est pas une obligation mais pour la programmation fonctionnelle un peu poussée, avec des imbrications, il est beaucoup plus simple de se repérer à l'indentation que de compter les parenthèses ou accolades. La norme du LISP (qui reste très influent dans la programmation fonctionnelle) est que la machine lit les parenthèses et le programmeur lit les indentations.

  3. #103
    Expert confirmé
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    avril 2016
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : avril 2016
    Messages : 1 198
    Points : 5 089
    Points
    5 089
    Par défaut
    Citation Envoyé par MiaowZedong Voir le message
    La norme du LISP (qui reste très influent dans la programmation fonctionnelle) est que la machine lit les parenthèses et le programmeur lit les indentations.
    En général, oui, sauf dans les moments où on fait de la métaprogrammation (c'est-à-dire quand on écrit du code qui lui-même écrit du code) en définissant des macros. Pendant ces moments, le lecteur lit les parenthèses, car celles-ci affichent de manière concise l'arbre syntaxique qu'il va directement manipuler.

  4. #104
    Membre averti Avatar de Christian_B
    Homme Profil pro
    Retraité
    Inscrit en
    octobre 2016
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : octobre 2016
    Messages : 225
    Points : 414
    Points
    414
    Par défaut
    Citation Envoyé par Pyramidev
    Il n'y a pas que if qui peut être utilisé dans une expression. Par exemple, voici une expression avec for
    Si je comprends bien dans Python il y a une syntaxe spéciale avec des mots clef comme if ou for (distincte de leur utilisation classique) mais pas pour la plupart des instructions (qui ne sont pas aussi des fonctions).

    Citation Envoyé par MiaowZedong
    L'indentation pour la lisibilité est une norme depuis le LISP au moins. Ce n'est pas une obligation mais pour la programmation fonctionnelle un peu poussée, avec des imbrications, il est beaucoup plus simple de se repérer à l'indentation que de compter les parenthèses ou accolades.
    Je suis bien d'accord qu'une bonne indentation est essentielle pour la lisibilité (dans tous les langages). Une bonne mise en forme (indentation, alignement correct des parenthèses etc) peut souvent être automatisée.

    Mais ce qui me choque, peut-être pour des raisons théoriques, depuis le début, c'est qu'un langage confonde correction syntaxique et mise en forme.
    D'autre part, en pratique, il me semble les programmes qui restent corrects si on modifie les espaces et tabulations (assimilés à un séparateur simple) posent moins de faux problèmes, peuvent être édités avec différents outils et réglages et être mis en forme de plusieurs façon au choix.

    Pendant ces moments, on est content d'avoir des parenthèses partout qui affichent de manière concise l'arbre syntaxique que l'on va directement manipuler.
    Oui et c'est possible (comme je dis ci-dessus) parce qu'on sait que le programme reste correct que l'on adopte une présentation "concise" ou non.
    C'est pourquoi un langage dépendant de la présentation comme Python ne favorise pas la méta-programmation, la programmation dirigée par les données et les techniques astucieuses du même genre, comme les macro écrasantes de Lisp.
    Linux Mint 20.1 Mate.
    Les armes nucléaires sont interdites depuis le 22 janvier. Y a plus qu'à ...

  5. #105
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : mai 2018
    Messages : 73
    Points : 228
    Points
    228
    Par défaut
    Citation Envoyé par MiaowZedong Voir le message
    Mais oui bien sûr. Python est un langage multi-paradigmes qui veut pouvoir faire du fonctionnel, mais il n'offre pas le même support et la même optimisation qu'un vrai langage fonctionnel come Haskell (). Il y a de grandes différences.
    Tout à fait, la raison n'est donc pas tout à fait juste

    Citation Envoyé par Christian_B Voir le message
    Dans quel sens Python est-il fonctionnel ?
    Python est un langage multi-paradigmes proposant entre autres l'approche fonctionnelle. Donc naturellement non, Python ne garantit pas certains aspects. L'immuabilité des données de l'approche fonctionnelle par exemple est en elle même en contradiction avec l'approche Objet.

    Citation Envoyé par Pyramidev Voir le message
    Ouh là, non. Si un jour tu as le temps d'apprendre le Haskell, tu verras que c'est trèèès différent du Python.
    Mais je sais Comme dit précédemment, je taquinais sur la formulation.

  6. #106
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : mai 2018
    Messages : 73
    Points : 228
    Points
    228
    Par défaut
    Citation Envoyé par Pyramidev Voir le message
    Ou alors, si on veut vraiment le faire tenir sur une ligne :
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    doubleSmallNumber = lambda x: (x if x > 100 else x*2) + 1
    Nope, violation PEP8

  7. #107
    Membre actif
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : mai 2018
    Messages : 73
    Points : 228
    Points
    228
    Par défaut
    Je cite Pyramidev car il a commencé à répondre à la question sur les parenthèses, mais c'est avant tout pour développer.

    Juste pour chipoter :
    Citation Envoyé par Pyramidev Voir le message
    [*]Une expression conditionnelle :
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    x if x > 100 else x*2
    En fait c'est la ternaire.

    Donc, les parenthèses en Python sont avant tout des symboles de priorité. Même dans ce cas là :

    Un cas d'utilisation des parenthèses autour des expressions est d'avoir des expressions sur plusieurs lignes. Par exemple, dans PEP 8, on peut lire l'exemple :
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    income = (gross_wages
              + taxable_interest
              + (dividends - qualified_dividends)
              - ira_deduction
              - student_loan_interest)
    Sans ces deux parenthèses, l'interpréteur croirait que la première ligne affecte gross_wages à income.
    On pourra écrire

    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    income = gross_wages \
              + taxable_interest \
              + (dividends - qualified_dividends) \
              - ira_deduction \
              - student_loan_interest

    La PEP8 préférera la première (les parenthèses)

    Citation Envoyé par Christian_B Voir le message
    Si je comprends bien dans Python il y a une syntaxe spéciale avec des mots clef comme if ou for (distincte de leur utilisation classique) mais pas pour la plupart des instructions (qui ne sont pas aussi des fonctions).
    Personnellement, je le formulerai dans l'autre sens : en Python, il y a des structures qui utilisent if et for pour simplifier l'écriture et la compréhension. La liste en intension ([transformation for element in collection]) n'est qu'une simplification du for classique.

    Mais ce qui me choque, peut-être pour des raisons théoriques, depuis le début, c'est qu'un langage confonde correction syntaxique et mise en forme.
    D'autre part, en pratique, il me semble les programmes qui restent corrects si on modifie les espaces et tabulations (assimilés à un séparateur simple) posent moins de faux problèmes, peuvent être édités avec différents outils et réglages et être mis en forme de plusieurs façon au choix.
    Je ne suis pas certain de comprendre, mais un erreur d'indentation (un décalage d'alignement) peut être corrigé par des outils automatiques. Le choix d'implémentation est qu'à l'exécution le code doit être définitif.

Discussions similaires

  1. Réponses: 13
    Dernier message: 19/05/2014, 14h16
  2. Windows Azure : plus simple, plus flexible, plus ouvert
    Par Gordon Fowler dans le forum Microsoft Azure
    Réponses: 2
    Dernier message: 08/06/2012, 21h44
  3. comment devenir de plus en plus bon en programmation.
    Par bigs3232 dans le forum La taverne du Club : Humour et divers
    Réponses: 24
    Dernier message: 15/06/2011, 16h49
  4. programme en bash qui ne fonctionne plus
    Par maxime612001 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 06/12/2009, 13h00
  5. Réponses: 4
    Dernier message: 10/04/2006, 08h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo