GithubHelp home page GithubHelp logo

apendley / middleclass Goto Github PK

View Code? Open in Web Editor NEW

This project forked from kikito/middleclass

2.0 1.0 0.0 216 KB

Object-orientation for Lua

Home Page: https://github.com/kikito/middleclass

License: MIT License

Lua 100.00%

middleclass's Introduction

MiddleClass

Lua OOP classes usually end being:

  • multi-file libraries, too difficult to understand
  • very small libraries, not very powerful

Middleclass attemps to be a mid-sized library (~140 lines of code, on a single file), with clean, easy to understand code, and yet powerful enough to be used in most cases.

Documentation

See the github wiki page for examples & documentation.

Features

  • ~140 lines of code
  • top-level Object class
  • all methods are virtual
  • instance.class returns the instance’s class
  • Class.name returns the class name (a string)
  • Class.super returns its super class
  • Class methods can be defined with Class.static.methodname
  • Subclassing:
    • class(name) creates a subclass of Object
    • class(name, Superclass) creates a subclass of the class SuperClass
    • SuperClass:subclass(name) also creates a subclass of the class SuperClass
  • Instantiation:
    • Classes can define an initialize method for initializing new instances. They can accept an arbitrary number of params.
    • Instances are created by doing Class:new(params) or also Class(params)
    • SuperClass’ methods can be used by using this syntax: SuperClass.initialize(self, params).
  • support for Lua metamethods: just define a method called __tostring, __add, etc. and your instances will be able to use it.
  • Mixins:
    • A very simple mechanism for sharing functionality among a group of classes that are otherwise non-related.
    • Mixins are just simple lua tables with functions inside them.
    • Class:include(mixin) will copy the function definitions of mixin to class
    • If mixin contains a function, called included, that function will be invoked right after the functions have been copied. It allows for modifying the class more profoundly.
  • instance:instanceOf(Class) returns true if instance is an instance of the class Class
  • Class:subclassOf(SuperClass) returns true if Class is a subclass of SuperClass
  • Class:includes(mixin) returns true if Class (or one of its superclasses) includes mixin.

Features left out:

  • metaclasses
  • classes are not Objects (instances are)
  • simulating a ‘super’ keyword (for performance concerns)

Installation

Just copy the middleclass.lua file wherever you want it (for example on a lib/ folder). Then write this in any Lua file where you want to use it:

require 'middleclass'

The package.path variable must be configured so that the folder in which middleclass.lua is copied is available, of course.

Please make sure that you read the license, too (for your convenience it’s now included at the beginning of the middleclass.lua file).

Specs

This project uses telescope for its specs. If you want to run the specs, you will have to install telescope first. Then just execute the following from the root inspect folder:

tsc -f spec/*

Performance tests

Middleclass also comes with a small performance test suit. Just run the following commant:

lua performance/run.lua

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.