Thursday, March 3, 2016

Preventative Programming



https://medium.freecodecamp.com/preventative-programming-how-fix-to-bugs-before-they-happen-9df82cf215c5
function arraySearch(value, array, callback) {
  callback = callback || false;
  for (var i = 0; i < array.length; i++) {
    if (array[i] == value) {
      if (callback) {
        return callback(value);
      } else {
        return value;
      }
    }
  }
}
var result = arraySearch(4,[1,2,3,4],function(val){return val+val;});

There are four points that we want to address in this exercise

  1. It shouldn’t break easily. If at all possible we want to prevent it from stopping on error. Instead it should return.
2. It should never return undefined. We want it to return false instead.
3. It must never make implicit or “loose” match.
4. When we must throw an error it should not be a generic error. We want something readable for both ourselves and the poor programmer who needs to work on this code after us.

=== means exactly equal to. Always do an explicit match when checking values. This habit will save you countless hours of time in the long run because you won’t be trying to debug statement that is evaluating as true.
function arraySearch(value, array, callback) {
  if (value === undefined || array === undefined || (array instanceof Array) === false) {
    return false;
  }
  callback = callback || false;
  var result = null;
  if (callback !== false && typeof callback !== 'function') {
    throw 'Callback to arraySearch is not a function';
    return false;
  }
  for (var i = 0; i < array.length; i++) {
    if (array[i] === value) {
      if (callback) {
        try{
          result = callback(value);
        }catch(e){
          throw 'Callback function in arraySearch threw the error : '+e.message;
        }
      }
      else {
        result = value;
      }
    }
  }
  return result || false;
}
  1. Check that your input values exist and set default values where necessary.
  2. Always make sure your input is of the same type as you are looking for. Never assume that an Array will be an Array or that an Integer will be an Integer.
  3. Always do an explicit match when comparing values (===).
  4. Write functions that return predictable values i.e. return false when failed or false or return the expected result when true.
  5. Try to write pure functions. A pure function is a function that always returns an expected value, and does not modify the original variables passed to it in any way.
  6. Throw custom errors where needed especially when executing callbacks and anonymous functions. You won’t remember exactly what your code does in 8 month’s time, so do yourself a favor and throw a clear error message while you still know what your code does.

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts