Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Namespaces

ShockScript defines properties whose name is tied to a namespace, which is useful for version control and protection.

// ===== FunInternal.es =====

package = com.fun.runner;

/**
 * @private
 */
public namespace FunInternal = "http://www.fun.com/2007/runner/internals";

// ===== Helper.es =====

package = com.fun.runner;

public class Helper {
    /**
     * @private
     */
    FunInternal const cache : [double] = [];

    //
    public function foo() {
        FunInternal::cache.push(0);
    }
}

// ===== friend.es =====

package = com.fun.runner.advanced;

import com.fun.runner.*;

public function friend(helper:Helper) {
    helper.FunInternal::cache.push(10);
}

Namespaces additionally apply to record types.

// ===== Flexible.es =====

package = com.example.product;

/**
 * Flexible version control namespace.
 */
public namespace Flexible = "http://business.com/product/flexible";

// ===== Judgement.es =====

package = com.example.product;

/**
 * Judgement version control namespace.
 */
public namespace Judgement = "http://business.com/product/judgement";

// ===== Pair.es =====

package = com.example.product;

/**
 * Pair.
 */
public type Pair = {
    Flexible::strength : [decimal],
    Judgement::strength : [decimal],
};