REQUIRE()

From Lianjapedia
Jump to: navigation, search

Purpose

Load a library file built with the Lianja C Extensions API, a Lianja procedure library or a JavaScript (.js), PHP (.php) or Python (.py) file

Syntax

REQUIRE(<expC>)

See Also

CLOSE PROCEDURE, DO, FUNCTION, INCLUDE(), INCLUDE_ONCE(), LIST PROCEDURE, PARAMETERS, PROCEDURE, RELEASE LIBRARY, REQUIRE_ONCE(), SET LIBRARY, EXECPYTHON()

Description

The REQUIRE() function opens the specified, scans the contents of it, and records the names and positions of the procedures defined within it. The <expC> is the name of the library file, which can be a Lianja API or Lianja procedure library file or a JavaScript (.js), PHP (.php) or Python (.py) file. If the file extension is not stated, '.so' is assumed on Linux. To load a Lianja procedure or class library file, the '.prg' or '.dbo' file extension must be included. You can place as many procedures or classes as you want in a procedure library file.

The SET LIBRARY TO command, without any filename specified, closes all active C Extensions library files. A closed library file discards any knowledge of where the procedures within reside. The RELEASE LIBRARY <library filename> command can be used to close an individual C Extensions library file.

The SET PROCEDURE and CLOSE PROCEDURE commands can also be used to handle Lianja procedure library files.

The active procedures and functions can be listed with the LIST or DISPLAY PROCEDURE commands.

In Lianja 6 dynamically loadable modules are now supported.

This provides OO encapsulation for existing code so that loading a library does not "pollute" the namespace and create potential problems due to name clashes.

Use the require() function to dynamically load a library and reference its public variables and procedures/functions in an OO manner.

The filename specified as the argument to the require() function must exist in the Lianja path or be prefixed with a special prefix e.g lib:/ or thirdpartylibs:/

Example

// Open Samples.so API procedure library
require("Samples")
// Close pdf.so API procedure library
release library pdf.so
// Close all active API procedure library files
set library to
 
// dynamically load a module
local mylib = require(“mylibrary.prg)
Mylib.name()
Mylib.var = “hello world”

LianjaScript Modules

LianjaScript Modules are similar to libraries in that they can be dynamically loaded and contain procedures that may be used in your Apps.

Modules however encapsulate all procedures, functions and public variables and make these only visible from an object. This prevents name clashes and is a simple way to wrap code libraries into objects without any special coding syntax.

Modules provide simple (Object-Oriented Programming ) OOP concepts:

  • Objects
  • Abstraction
  • Encapsulation
  • Inheritance
  • Polymorphism

e.g.

// file: mylib1.prg
public myvar = "Barry"
 
proc getMyVar()
return myvar

You dynamically load a module using the require() built-in function:

public mylib = require("mylib1")

You can now access the public variables and call procs like this:

value = mylib.myvar
value = mylib.getMyVar()

Modules also handle inheritance:

// file: mylib2.prg
public myvar = "Bill"
 
proc getMyVar()
return myvar

Now dynamically load the modules:

public mylib = require("mylib1", "mylib2") // , "mylib3"... etc.

You can now access the public variables and call procs like this:

value = mylib.myvar
value = mylib.getMyVar()

Modules can optionally contain an init() initialization proc which is called after the module is loaded:

// file: mylib3
public myvar = "Bill"
 
proc init()
    myvar = "Tom"
endproc
 
proc getMyVar()
return myvar

Note that the filenames specified as arguments to the require() function may contain the special filename prefixes such as lib:/ and thirdparytlibs:/ etc.