Choose a namespaced operation by key.

namespace-lookup When operations are grouped by name, bracket lookup can choose one operation from a small table of functions.

Namespace Lookup

operation
namespace_lookup.js
Replay: real traced execution (multi-file project)
const operation = "double";
const result = {
  double(value) {
    return value * 2;
  },
  triple(value) {
    return value * 3;
  },
  square(value) {
    return value * value;
  },
}[operation](5);

console.log("operation=" + operation);
console.log("result=" + result);
const operation = "triple";
const result = {
  double(value) {
    return value * 2;
  },
  triple(value) {
    return value * 3;
  },
  square(value) {
    return value * value;
  },
}[operation](5);

console.log("operation=" + operation);
console.log("result=" + result);
const operation = "square";
const result = {
  double(value) {
    return value * 2;
  },
  triple(value) {
    return value * 3;
  },
  square(value) {
    return value * value;
  },
}[operation](5);

console.log("operation=" + operation);
console.log("result=" + result);
  1. operation ← double, result ← 10

    1const operation→ double = "double"; //@operation="triple", "square"2const result→ 10 = {3  double(value) {4    return value * 2;5  },6  triple(value) {7    return value * 3;8  },9  square(value) {10    return value * value;11  },12}[operationdouble](5);1314console.log("operation=" + operationdouble);15console.log("result=" + result10);
    outputoperation=double
    result=10
  1. operation ← triple, result ← 15

    1const operation→ triple = "triple";2const result→ 15 = {3  double(value) {4    return value * 2;5  },6  triple(value) {7    return value * 3;8  },9  square(value) {10    return value * value;11  },12}[operationtriple](5);1314console.log("operation=" + operationtriple);15console.log("result=" + result15);
    outputoperation=triple
    result=15
  1. operation ← square, result ← 25

    1const operation→ square = "square";2const result→ 25 = {3  double(value) {4    return value * 2;5  },6  triple(value) {7    return value * 3;8  },9  square(value) {10    return value * value;11  },12}[operationsquare](5);1314console.log("operation=" + operationsquare);15console.log("result=" + result25);
    outputoperation=square
    result=25

Follow the Operation

  1. operation starts as double.
  2. The lookup object stores three functions: double, triple, and square.
  3. Bracket lookup selects the double function.
  4. The selected function receives 5.
  5. double(5) returns 10, so the program prints result=10. | operation | function called | input | result | | --- | --- | ---: | ---: | | double | value * 2 | 5 | 10 | | triple | value * 3 | 5 | 15 | | square | value * value | 5 | 25 |

Exercise: namespace_lookup.js

Reproduce operation=double and result=10, then use operations triple and square to predict result=15 and result=25.