Python

de PHP à Python : Gangnam Style

« Gangnam Style » kézako : Bon en fait j’étais parti vous parler sérieusement avec un titre de PSR-1 à PEP8 mais ca manquait de fun ;-)

Donc le sujet du jour de la série « de PHP à Python« , comme le laisse supposer (ceux qui connaissent) ces 2 ‘codes’ PSR-1 & PEP8 : les règles de coding dans chacun des 2 langages.
Je me suis dit qu’après tout, on ne pouvait pas aborder le passage à python sans en passer par les règles de « rédaction », donc voici.

de PHP …

Pour PHP la définition de la PSR-1 est toute récente, et comme le rappelle mageekguy, celle ci est somme toute très subjective car cela n’empêchera personne de coder comme il a toujours fait, et cette règle peut déranger les habitudes de tout à chacun (moi le premier :) exemple de code :

<?php
// declaration
function foo()
{
    // function body
}
 
// conditional declaration is *not* a side effect
if (! function_exists('bar')) {
    function bar()
    {
        // function body
    }
}

Pourquoi diable pour les fonctions les accolades sont à la ligne suivante et pas sur celle du if ?
Perso, je les ai toujours TOUTES mises sur la même ligne, une habitude prise avec PERL :)

… à Python
La PEP8 quant à elle n’a que 12 ans …

Les accolades n’existent pas on met des « : » sur la même ligne que l’instruction et on indent de 4 espaces.

Voici à quoi cela ressemble et on en discute après :

Python tout en long
Python tout en long
#Use 4 spaces per indentation level.
foo = long_function_name(var_one, var_two, var_three, var_four)
 
def long_function_name(var_one, var_two, var_three, var_four):
    print(var_one)

on remarquera qu’en php on défini une fonction par le mot clé « function », ici on utilisera « def »

Le Python n’étant pas rigide en tout point, parfois « la queue » (ligne de code) est un peu longue donc on la « retrousse » comme suit :

Un python qui se fait tout petit
Un python qui se fait tout petit
# Aligned with opening delimiter
foo = long_function_name(var_one, var_two,
                         var_three, var_four)
 
# More indentation included to distinguish this from the rest.
def long_function_name(
        var_one, var_two, var_three,
        var_four):
    print(var_one)

C’est tout aussi lisible et l’indentation fait son office

Alors certes cela peut perturber le développeur PHP au début, mais si comme moi vous aimez que ca soit au carré vous vous y ferez super vite.

La PEP8 définie également le nombre de lignes blanches entre 2 « def » ou la taille maximum de caractères par ligne.

Une autre règle importante concerne les imports.

En PHP on n’ira pas écrire

use Customer, Order

mais bien

use Customer
use Order

En Python on n’écrira pas non plus

import customer, order

mais bien 2 imports distincts

import customer
import order

on retiendra que si la PEP8 n’est pas respectée, en exécutant votre script python vous aurez droit à une belle erreur ;)

PHP a coté est largement plus laxiste !

Par exemple j’avais pris pour habitude d(e volontairement) écrire ce genre de tru,c pour bien le repérer visuellement plus tard, et le retirer quand j’avais fini de débogger :

function bagnole_spec($voiture) {
var_dump($voiture);
   if ( in_array($voiture,'nb_portes')) {
       echo $voiture['nb_portes'];
   }
}

En python, aucun atermoiement n’est possible, on ne peut pas faire du code crade même temporairement, ça doit pas dépasser. L’ordre de facto on s’y fait, après tout le deboggage a sa place, autant ne pas le négliger :)

Conclusion :
Bon évidement la PSR-1 ne se contente pas que de cela de même que la PEP8 ne se borne pas à ces limitations/impositions de style.

Se conformer aux règles a du bon dès le départ, bon sauf quand ça fait plus de 10 piges qu’on crache du code et qu’on vous dit qu’il faut changer ;)

De toute façon avec des IDE modernes vous aurez tout loisir que ce dernier vérifie que votre code colle aux exigences du langage.
Par exemple avec Python et Aptana vous pouvez ajouter les lib qui permettent à l’IDE de valider que votre code n’est pas écrit de travers, l’une d’elle est pylint, ça donne cela :

PEP8 avec Pylint dans Aptana
PEP8 avec Pylint dans Aptana

Comme on voit là sur la ligne return render, j’ai bien le droit de me faire plaisir par quelques retours à la ligne alignés sur la parenthèse ouvrante, quant à la ligne logger.debug on la voit beaucoup trop longue. Là python ne poussera pas le bouchon à nous invalider le code pour « si peu ».

Pour en revenir à « Gangnam Style »: avec les accolades à tirelarigot on a vraiment l’impression d’avoir une posture de ‘code’ sur un canasson (quand on code pas comme un bourrin ;) et coté Python, d’aucuns diront qu’ils sont des poneys zailés ;)

3 réflexions au sujet de « de PHP à Python : Gangnam Style »

  1. Petite précision, en Python une indentation correcte est une nécessité syntaxique, pas un style de codage. (Le nombre d’espaces lui est bien une convention.) Mal indenter une ligne de code en Python c’est un peu comme une accolade manquante ou de trop en PHP.
    Le reste de l’article concerne bien une question de style conventionnel, donc censé accroître la facilité de lecture pour nous les humains, le compilateur lui ça lui est complètement équilatéral. ;-)

Les commentaires sont fermés.