Fermer2
ZephLe 18/04/2017 à 23:52
Il n'y a pas longtemps, je me demandais pourquoi les informaticiens jugeaient souvent négativement le travail de leurs pairs, et si ce jugement était plutôt basé sur des faits ou des goûts. Ce soir, Flanker et vince me proposent de faire suite à des discussions récentes dans le sujet mon langage est mieux que le tien et jouer le jeu sur des exemples de code perso.

Alors bien sûr ça ne permettra que de commenter des bouts de code limités et sortis de leur contexte, donc d'aborder une fraction très réduite de l'avis qu'on pourrait exprimer à propos d'un projet, mais déjà ça sera peut-être une bonne illustration de ces discussions "goûts et couleurs" que j'évoquais. Essayez de choisir des choses lisibles sans trop de contexte histoire de ne pas trop brouiller les pistes smile Si vous repérez un bout de code qui réutilise un style que vous appréciez, ou au contraire quelque chose que vous considérez comme une énorme connerie, faites entendre votre voix !

Bref, postez du code et attendez les commentaires, en mettant votre amour-propre de côté ^^



Je commence avec une toute petite fonction issue d'un forum codé en PHP et qui sert à exporter une valeur sous la forme d'une expression PHP, comme ce que fait var_export mais de façon compacte pour les tableaux (i.e. sans répéter les indices numériques quand ils peuvent rester implicites) :
PHP - function export ($input)
function export ($input) { if (is_array ($input)) { $ascend = function (&$result, $item) { return $result === $item ? $item + 1 : null; }; $out = ''; // Array keys can be omitted only if they are numeric, contiguous, ordered and start at 0 if (array_reduce (array_keys ($input), $ascend, 0) !== count ($input)) { foreach ($input as $key => $value) $out .= ($out !== '' ? ',' : '') . self::export ($key) . '=>' . self::export ($value); } else { foreach ($input as $value) $out .= ($out !== '' ? ',' : '') . self::export ($value); } return 'array(' . $out . ')'; } return var_export ($input, true); }
Autre code sans rapport, une classe qui sert à lancer des processus système en Python, que j'utilise pour lancer des processus (sans blague !) sans utiliser explicitement les fonctions standard du module "subprocess" que je trouve difficile à mémoriser, en particulier pour pouvoir piper des processus plus faciement :
Python - class Process
#!/usr/bin/env python import subprocess class ProcessResult: def __init__ (self, code, out, err): self.code = code self.err = err self.out = out def __bool__ (self): return self.code == 0 def __nonzero__ (self): return self.code == 0 class Process: def __init__ (self, args): self.args = args self.directory = None self.input = None self.parent = None self.shell = False self.stdin = None def _open (self, stdout): process = subprocess.Popen (self.args, cwd = self.directory, shell = self.shell, stderr = subprocess.PIPE, stdin = self.stdin, stdout = stdout) if self.parent is not None: self.parent._open (process.stdin) return process def execute (self): process = self._open (subprocess.PIPE) (out, err) = process.communicate (self.input) return ProcessResult (process.returncode, out, err) def pipe (self, args): next = Process (args) next.parent = self next.stdin = subprocess.PIPE return next def set_directory (self, directory): self.directory = directory return self def set_input (self, input): self.input = input self.stdin = subprocess.PIPE return self def set_shell (self, shell): self.shell = shell return self Exemple d'utilisation :
archive = Process (['git', 'archive', hash_to, '.']) \ .set_directory (base_path) \ .pipe (['tar', 'xC', work_path]) \ .execute () if not archive: logger.warning ('Couldn\'t export archive from Git: {0}'.format (archive.err.decode ('utf-8'))) return None
À vous ^^