11

State-of-the-art shitcode principles your project should follow

 4 years ago
source link: https://github.com/trekhleb/state-of-the-art-shitcode
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

State-of-the-Art Shitcode Principles

This a list of state-of-the-art shitcode principles your project should follow.

Get Your Badge

If your repository follows the state-of-the-art shitcode principles you may use the following "state-of-the-art shitcode" badge:

[![State-of-the-art Shitcode](https://img.shields.io/static/v1?label=State-of-the-art&message=Shitcode&color=7B5804)](https://github.com/trekhleb/state-of-the-art-shitcode)

The Principles

:hankey: Name variables in a way as if your code was already obfuscated

Less keystrokes, more time for you.

Good :+1|type_1_2:

let a = 42;

Bad :-1|type_1_2:

let age = 42;

:hankey: Mix variable/functions naming style

Celebrate the difference.

Good :+1|type_1_2:

let wWidth = 640;
let w_height = 480;

Bad :-1|type_1_2:

let windowWidth = 640;
let windowHeight = 480;

:hankey: Never write comments

No one is going to read your code anyway.

Good :+1|type_1_2:

const cdr = 700;

Bad :-1|type_1_2:

// Callback function debounce rate in milliseconds.
const callbackDebounceRate = 700;

:hankey: Always write comments in your native language

If you violated the "No comments" principle then at least try to write comments in a language that is different from the language you use to write the code. If your native language is English you may violate this principle.

Good :+1|type_1_2:

// Закриваємо модальне віконечко при виникненні помилки.
toggleModal(false);

Bad :-1|type_1_2:

// Hide modal window on error.
toggleModal(false);

:hankey: Try to mix formatting style as much as possible

Celebrate the difference.

Good :+1|type_1_2:

let i = ['tomato', 'onion', 'mushrooms'];
let d = [ "ketchup", "mayonnaise" ];

Bad :-1|type_1_2:

let ingredients = ['tomato', 'onion', 'mushrooms'];
let dressings = ['ketchup', 'mayonnaise'];

:hankey: Put as much code as possible into one line

Good :+1|type_1_2:

document.location.search.replace(/(^\?)/,'').split('&').reduce(function(o,n){n=n.split('=');o[n[0]]=n[1];return o},{})

Bad :-1|type_1_2:

document.location.search
  .replace(/(^\?)/, '')
  .split('&')
  .reduce((searchParams, keyValuePair) => {
    keyValuePair = keyValuePair.split('=');
    searchParams[keyValuePair[0]] = keyValuePair[1];
    return searchParams;
  },
  {}
)

:hankey: Fail silently

Whenever you catch an error it is not necessary for anyone to know about it. No logs, no error modals, chill.

Good :+1|type_1_2:

try {
  // Something unpredictable.
} catch (error) {
  // tss...   
}

Bad :-1|type_1_2:

try {
  // Something unpredictable.
} catch (error) {
  setErrorMessage(error.message);
  // and/or
  logError(error);
}

:hankey: Do not lock your dependencies

Update your dependencies on each new installation in uncontrolled way. Why stick to the past, let's use the cutting edge libraries versions.

Good :+1|type_1_2:

$ ls -la

package.json

Bad :-1|type_1_2:

$ ls -la

package.json
package-lock.json

:hankey: Triangle principle

Be like a bird - nest, nest, nest.

Good :+1|type_1_2:

function someFunction() {
  if (condition1) {
    if (condition2) {
      asyncFunction(params, (result) => {
        if (result) {
          for (;;) {
            if (condition3) {
            }
          }
        }
      })
    }
  }
}

Bad :-1|type_1_2:

function someFunction() {
  if (!condition1 || !condition2) {
    return;
  }
  
  const result = await asyncFunction(params);
  if (!result) {
    return;
  }
  
  for (;;) {
    if (condition3) {
    }
  }
}

:hankey: Avoid covering your code with tests

This is a duplicate and unnecessary amount of work.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK