Skip to main content

Traduire du code vers un autre langage de programmation

Discussion avec Copilot peut vous aider à réécrire du code pour effectuer les mêmes opérations, mais dans un autre langage de programmation.

Il existe de nombreuses raisons pour lesquelles vous pourriez vouloir déplacer du code d'un langage de programmation à un autre. Chaque langage de programmation a ses propres forces et faiblesses, et vous pouvez vouloir tirer parti de fonctionnalités disponibles dans un autre langage. Par exemple, vous pouvez vouloir déplacer du code vers un langage offrant de meilleures performances, ou qui utilise un typage fort pour aider à éviter les bugs.

Pour faciliter la maintenance du code, vous pouvez vouloir déplacer du code vers un langage plus largement utilisé dans votre organisation. Par exemple, si peu de personnes dans votre organisation connaissent un langage plus ancien comme Perl, vous pouvez vouloir déplacer tout code Perl encore utilisé vers un langage plus couramment utilisé comme Python ou JavaScript.

Copilot peut vous aider à traduire du code d'un langage à un autre. Traduire un fichier autonome, comme un script, est simple. Ce processus est décrit dans cet article.

Traduire un projet contenant plusieurs fichiers est un processus plus complexe, et est décrit dans Utilisation de GitHub Copilot pour migrer un projet vers un autre langage de programmation.

Exemple de scénario

Le script Perl suivant invite l'utilisateur à entrer le chemin d'accès à un fichier texte. Il vérifie ce que l'utilisateur saisit et, si un fichier texte est trouvé à ce chemin, il affiche un décompte des mots et des caractères pour le contenu du fichier.

Perl
#!/usr/bin/perl
use strict;
use warnings;
use File::Spec;
use File::Basename;

print "Please enter the path to a local text file: ";
chomp(my $file_path = <STDIN>);

if ($file_path =~ /[`|;&<>(){}\[\]]/ || !File::Spec->file_name_is_absolute($file_path) && dirname($file_path) ne '.') {
    die "Invalid file path. Please provide a valid path.\n";
}
if (!-e $file_path) {
    die "File not found. Please provide an existing file path.\n";
}

open(my $fh, '<', $file_path) or die "Could not open file '$file_path': $!\n";

my $is_binary = 0;
while (read($fh, my $buffer, 1024)) {
    if ($buffer =~ /[^\x09\x0A\x0D\x20-\x7E]/) {
        $is_binary = 1;
        last;
    }
}
close($fh);

if ($is_binary) {
    die "The file '$file_path' is a binary file. Please provide a text file.\n";
}

open($fh, '<', $file_path) or die "Could not open file '$file_path': $!\n";
my $content = do { local $/; <$fh> };
close($fh);

my $word_count = scalar(split /\s+/, $content);
my $char_count = length($content);

print "The file '$file_path' contains $word_count words and $char_count characters.\n";

Exemples d’invite

Copilot Chat prompt
Tell me how I can convert this Perl script to Typescript. The functionality and output of the new script should be exactly the same as the existing one. Also tell me how to run the new file using Node.

Exemple de réponse

Copilot génère le code Typescript suivant.

Remarque

Les réponses de Discussion avec Copilot sont non déterministes, vous pouvez donc obtenir une réponse différente de celle présentée ici.

TypeScript
import * as fs from 'fs';
import * as path from 'path';
import * as readline from 'readline';

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.question('Please enter the path to a local text file: ', (filePath) => {
    rl.close();

    if (/[`|;&<>(){}\[\]]/.test(filePath) || (!path.isAbsolute(filePath) && path.dirname(filePath) !== '.')) {
        console.error('Invalid file path. Please provide a valid path.');
        process.exit(1);
    }

    if (!fs.existsSync(filePath)) {
        console.error('File not found. Please provide an existing file path.');
        process.exit(1);
    }

    const fileBuffer = fs.readFileSync(filePath);
    const isBinary = fileBuffer.some(byte => byte < 9 || (byte > 13 && byte < 32) || byte > 126);

    if (isBinary) {
        console.error(`The file '${filePath}' is a binary file. Please provide a text file.`);
        process.exit(1);
    }

    const content = fileBuffer.toString('utf-8');
    const wordCount = content.split(/\s+/).length;
    const charCount = content.length;

    console.log(`The file '${filePath}' contains ${wordCount} words and ${charCount} characters.`);
});

Enregistrez ce fichier en tant que wordcount.ts.

Copilot explique ensuite comment exécuter le nouveau fichier à l'aide de Node.

  1.           **Installer Node.js :** Si vous ne l'avez pas déjà, téléchargez et installez Node.js depuis le site web officiel : https://nodejs.org/.
    
  2.           **Installer TypeScript :**
    
    npm install -g typescript
    
  3.           **Compiler le code TypeScript :**
    
    tsc wordcount.ts
    

    Cela créera un fichier wordcount.js dans le même répertoire.

  4.           **Exécuter le fichier JavaScript avec Node.js :**
    
    node wordcount.js
    

Pour aller plus loin