astuces code hacker
5/5 - (2 votes)

Hello ! Aujourd’hui, je vais te révéler 10 astuces de code que même les hackers ignorent. Ouais, je sais, c’est dingue !

astuce de code

 

1. Utiliser git bisect pour trouver l’origine des bugs

Tu connais Git. Mais savais-tu que Git a un mode “bisect” ? L’outil te permet d’identifier exactement quel commit a tout foutu en l’air. Il divise la liste des commits en deux, encore et encore, jusqu’à ce qu’il trouve le coupable. Voilà, c’est magique. Et bizarrement, peu de gens le savent ! N’hésites pas à consulter la documentation officielle.

 

2. Commentaires conditionnels en JavaScript

Tu es fatigué de désactiver manuellement les lignes de code pour le débogage ? Utilise des commentaires conditionnels ! Avec un simple if (DEBUG) { /* Ton code ici */ }, tu peux activer ou désactiver des blocs de code en un clin d’œil. Simple mais efficace.

 

Exemple de commentaire conditionnel DEBUG :

// Imaginons que tu aies cette variable pour activer ou désactiver le débogage
const DEBUG = true;

// Quelque part dans ton code...

if (DEBUG) {
    console.log("Ceci est un message de débogage. Si DEBUG est à false, tu ne le verras pas.");
}

// Autre exemple : imagine une fonction qui affiche des informations seulement en mode débogage

function afficherInfosDebug(data) {
    if (DEBUG) {
        console.log("Informations pour le débogage:", data);
    }
}

// Quand tu appelles cette fonction, le message ne s'affichera que si DEBUG est à true.
afficherInfosDebug("Voici quelques infos utiles.");

Voilà, l’idée est que si tu changes DEBUG en false, tous ces messages de débogage disparaîtront automatiquement sans que tu aies à les commenter ou les supprimer manuellement.

 

3. Les Expressions régulières pour le nettoyage de texte

Les expressions régulières, c’est les bêtes noires de beaucoup de devs. Mais elles sont hyper pratiques pour nettoyer du texte ou extraire des données. Une fois que tu auras compris leur logique, c’est comme apprendre le langage de l’amour, mais en plus geek.

Exemple d’expressions régulières pour extraire des numéros de téléphone :

// Imaginons que tu aies un texte avec des numéros de téléphone et tu veux les extraire

let texte = "Salut, mon numéro est 06-12-34-56-78 et le numéro de Marc est 07-89-01-23-45.";

// Utilisation d'une expression régulière pour trouver tous les numéros de téléphone français
let regex = /\d{2}-\d{2}-\d{2}-\d{2}-\d{2}/g;

let numerosTrouves = texte.match(regex);

console.log(numerosTrouves);  // ["06-12-34-56-78", "07-89-01-23-45"]

 

4. Snippets personnalisés dans ton éditeur de texte

Allez, paresseux, arrête de copier-coller ! Dans des éditeurs comme VSCode ou Sublime Text, tu peux créer tes propres snippets. Par exemple, tape “fonc” et BOUM, une fonction toute prête apparaît. Ça, c’est du level up !

 

Le tuto express :

1.Ouvre VSCode.

2.Navigue vers “Fichier” > “Préférences” > “Fragments de code utilisateur” (ou utilise simplement Ctrl+Shift+P pour ouvrir la palette de commandes, puis tape “snippets” et sélectionne “Configurer les fragments de code utilisateur”).

3.Choisis le langage pour lequel tu souhaites créer le snippet, ici “JavaScript”.

4.Ajoute le code de snippet suivant :

{
    "Fonction Fléchée": {
        "prefix": "fonc",
        "body": [
            "const $1 = ($2) => {",
            "\t$0",
            "};"
        ],
        "description": "Crée rapidement une fonction fléchée"
    }
}

5.auvegarde et ferme le fichier.

Maintenant, dans n’importe quel fichier JavaScript ouvert dans VSCode, tape simplement “fonc”, et tu verras une proposition pour ton snippet “Fonction Fléchée”. Sélectionne-le, et BOUM ! Une fonction fléchée apparaît prête à être utilisée, te laissant insérer le nom de la fonction, les paramètres et le contenu.

 

5. Throttling et Debouncing en JavaScript

Tu veux optimiser les performances de ton application ? Utilise le Throttling et le Debouncing. Ces techniques limitent le nombre de fois qu’une fonction peut être exécutée dans un temps donné. C’est comme mettre un portier à l’entrée de ton club VIP de fonctions.

 

Exemple de Throttling

Le throttling limite l’exécution d’une fonction à une fois toutes les x millisecondes. Imaginons que tu aies un événement de défilement (scroll) et que tu ne veuilles pas qu’il soit traité à chaque pixel défilé, mais plutôt toutes les 200 millisecondes :

function handleScrollEvent() {
    console.log('Un événement de défilement s\'est produit !');
}

let isThrottling = false;

window.addEventListener('scroll', function() {
    if (!isThrottling) {
        handleScrollEvent();
        isThrottling = true;

        setTimeout(function() {
            isThrottling = false;
        }, 200);
    }
});

Grâce au throttling, handleScrollEvent n’est appelé qu’une fois toutes les 200 millisecondes, même si l’événement de défilement est déclenché beaucoup plus fréquemment.

 

Exemple de Debouncing

Le debouncing retarde l’exécution d’une fonction jusqu’à ce qu’il se soit écoulé x millisecondes depuis la dernière fois qu’elle a été invoquée. C’est utile pour des choses comme la validation d’un champ de saisie après que l’utilisateur a arrêté de taper :

let timer;

function handleInputChange() {
    console.log('Le champ de saisie a changé !');
}

document.getElementById('inputField').addEventListener('keyup', function() {
    clearTimeout(timer);

    timer = setTimeout(handleInputChange, 300);
});

Dans cet exemple, chaque fois que l’utilisateur tape quelque chose dans le champ de saisie (inputField), le timer est réinitialisé. La fonction handleInputChange n’est appelée que 300 millisecondes après que l’utilisateur a arrêté de taper.

Voilà, avec ces deux techniques, tu as un contrôle précis sur la fréquence à laquelle tes fonctions sont exécutées, ce qui est essentiel pour optimiser les performances et offrir une meilleure expérience utilisateur.

 

6. Utiliser cron pour automatiser des tâches

Le bon vieux cron sur les systèmes UNIX est un vrai couteau suisse. Tu peux l’utiliser pour programmer des tâches récurrentes, comme des backups ou des mises à jour. C’est l’outil de l’homme invisible du code, toujours là, mais jamais vu.

# CRON EXEMPLES

# La syntaxe générale d'une tâche cron est la suivante :
# * * * * * /chemin/vers/la/commande

# Expliquons rapidement ces étoiles :
# - 1ère étoile : Minute (0 - 59)
# - 2ème étoile : Heure (0 - 23)
# - 3ème étoile : Jour du mois (1 - 31)
# - 4ème étoile : Mois (1 - 12)
# - 5ème étoile : Jour de la semaine (0 - 7, où 0 et 7 représentent tous deux le dimanche)

# Exemple 1: Exécute une tâche tous les jours à 2 heures du matin
# Ici, on fait un backup de notre base de données
0 2 * * * /chemin/vers/backup_database.sh

# Exemple 2: Exécute une tâche tous les lundis à 5 heures du matin
# Imaginons que ce script mette à jour notre application
0 5 * * 1 /chemin/vers/update_app.sh

# Exemple 3: Exécute une tâche le premier jour de chaque mois
# Ce script pourrait nettoyer des fichiers temporaires
0 0 1 * * /chemin/vers/clean_temp_files.sh

# Exemple 4: Exécute une tâche toutes les 15 minutes
# Ce pourrait être un script qui vérifie la santé de notre serveur
*/15 * * * * /chemin/vers/check_server_health.sh

# N'oublie pas de donner les droits d'exécution à tes scripts avec 'chmod +x /chemin/vers/ton_script.sh'

 

7. La magie des “Comprehensions” en Python

Si tu codes en Python, les “Comprehensions” sont tes nouveaux meilleurs amis. Ils rendent les listes, les ensembles et les dictionnaires plus propres et plus efficaces. Le tout en une seule ligne ! C’est comme faire un Rubik’s Cube en une seconde.

 

Exemple de Comprehensions Python

# PYTHON COMPREHENSIONS

# Imaginons que tu aies cette liste de nombres :
nombres = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 1. List Comprehension:
# Tu veux une nouvelle liste avec ces nombres multipliés par 2.
nombres_doubles = [x * 2 for x in nombres]
# Résultat: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

# 2. Condition dans List Comprehension:
# Tu veux seulement les nombres pairs de la liste.
nombres_pairs = [x for x in nombres if x % 2 == 0]
# Résultat: [2, 4, 6, 8, 10]

# 3. Set Comprehension:
# Imaginons que tu aies une liste avec des doublons et que tu veuilles les éléments uniques.
liste_avec_doublons = [1, 2, 2, 3, 4, 4, 5]
ensemble_unique = {x for x in liste_avec_doublons}
# Résultat: {1, 2, 3, 4, 5}

# 4. Dict Comprehension:
# Tu veux créer un dictionnaire où la clé est le nombre et la valeur est ce nombre au carré.
dict_carres = {x: x**2 for x in nombres}
# Résultat: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100}

 

8. Utilisation de Docker pour les environnements de développement

Docker, c’est pas que pour les hipsters de la tech. C’est super utile pour créer des environnements de développement isolés. Plus besoin de se prendre la tête avec les dépendances !

 

Isolation:

Avec Docker, chaque application est emballée avec toutes ses dépendances, son code, ses bibliothèques, etc. dans un conteneur. Cela signifie que peu importe où tu exécutes ce conteneur, il se comportera toujours de la même manière. Finis les problèmes du type “mais ça marchait sur ma machine !”.

# Pour lancer une application dans un conteneur Docker :
docker run nom_de_l_image

 

Légèreté:

Les conteneurs Docker partagent le même noyau OS, mais ils fonctionnent comme des instances séparées et isolées. Cela les rend beaucoup plus légers que les machines virtuelles traditionnelles.

 

Gestion des dépendances:

Avec Docker, chaque projet peut avoir ses propres dépendances avec ses propres versions dans son propre conteneur. Tu as un projet qui a besoin de Python 2 et un autre qui a besoin de Python 3 ? Pas de problème !

# Exemple de fichier Docker pour une application Python :
FROM python:3.8
WORKDIR /app
COPY . .
RUN pip install --no-cache-dir -r requirements.txt
CMD ["python", "./ton_script.py"]

 

Intégration et déploiement continus:

Docker s’intègre bien avec des outils populaires comme Jenkins ou GitLab CI/CD, rendant l’intégration et le déploiement de tes applications plus fluides.

 

Ecosystème et partage:

Avec Docker Hub, tu as accès à des milliers d’images préconstruites pour différentes tâches et technologies, que tu peux télécharger et utiliser directement. Ou alors, tu peux aussi y pousser tes propres images.

# Pour télécharger une image depuis Docker Hub :
docker pull nom_de_l_image

 

9. La commande “!!” dans le terminal

Tu viens de taper une commande dans ton terminal, mais oups, t’as oublié le “sudo” ? Pas de souci, tape sudo !! et la dernière commande sera réexécutée avec les permissions de super-utilisateur. C’est le “Control + Z” du terminal !

 

10. Les fonctions “IIFE” en JavaScript

IIFE, ça veut dire “Immediately Invoked Function Expression“. En gros, tu déclares et exécutes une fonction en même temps. Cela aide à garder le scope propre, à éviter les conflits et à écrire du code modulaire.

Elles ne laissent pas de noms ou de variables derrière elles, ce qui est super pour éviter de polluer la portée globale. C’est comme avoir une petite bulle autour de ton code pour le protéger du monde extérieur.

 

Structure de base d’une IIFE :

(function() {
    // Ton code ici
})();

Remarque comment la fonction est enveloppée entre des parenthèses, c’est ce qui fait la magie et lui permet d’être exécutée immédiatement.

 

Exemples concrets:

 

Créer une portée isolée :

Supposons que tu veuilles créer des variables sans affecter la portée globale :

(function() {
    let secret = "No one can see me!";
    console.log(secret);  // Affiche : "No one can see me!"
})();

console.log(secret);  // Erreur! secret n'est pas défini.

 

Éviter les conflits :

Si tu utilises plusieurs bibliothèques JavaScript, il peut y avoir des conflits de noms. Les IIFE peuvent aider à résoudre ce problème.

let libraryA = {
    version: 1.0
};

(function($) {
    let version = "2.0";
    console.log($);  // Affiche : {version: 1.0}
})(libraryA);

 

Passer des paramètres :

Les IIFE peuvent accepter des paramètres, comme n’importe quelle autre fonction.

(function(name) {
    console.log("Hello, " + name + "!");
})("Alice");  // Affiche : "Hello, Alice!"

 

Pourquoi utiliser une IIFE ?

  • Isolation : Ton code est à l’abri des interférences extérieures.
  • Propreté : Évite de polluer la portée globale.
  • Exécution immédiate : Parfait pour les tâches qui doivent être effectuées dès le chargement de la page.

 

Entre les expressions régulières et Docker, ton cerveau de dev est probablement en ébullition. Et ouais, c’était le but. Si tu croyais tout connaître de l’univers du code, j’espère que cette petite liste t’a remis à ta place… mais gentiment, hein. Tout est une question d’apprentissage constant, et dans le monde du développement, il y a toujours de nouvelles pépites à découvrir.