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
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 ^^