basescript.js

0.2.72 • Public • Published

🏗️ BaseScript

BaseScript.net

About | docs | bugs | license

version

ℹ️ About

🏗️ BaseScript is a programming language, which aims to compile your code to JavaScript.

Why to choose BaseScript?

  • It is in the phase of active development, so more and more features are being added constantly. Also, check out RELEASE_NOTES.md, as well as Syntax Highlighter for the language
  • Your ideas are also being reviewed and added, as the language is welcoming collaborations
  • It provides you things, that JavaScript lacks:
    • Typed functions and arguments
    • Interfaces
    • Pipe forward and pipe backward operators
    • Ability to get compile time errors to prevent runtime errors
    • Syntax sugar from other languages, that are so excess
    • Ability to customize your code the way you want it, and much more!
    • Easy to switch and learn
    • Code with ease
    • Reabable and efficient

This page represents the simple to follow documentation of the language.

🔗 How to contact the creators

📬 Email: basescriptnet@gmail.com
✈️ Telegram: @basescript
📹 YouTube: BaseScript Channel

📁 Docs

• Content:

▶️ Getting started

Learn more about CLI usage.

Install via npm

npm i basescript.js -g

At any directory use

bsc -f <file_name> [options?]

For help use

bsc -help

To install globally after git clone, you can use

npm install -g ./

[Deprecated]: Include built-in functionality in .bs files

If you already have it in the main file, connected files won't need it (as well as with -r flag)

#include <builtins>

Run from CLI without an output file

bsc -f <file_name> -r

🗄️ Variables

Variable declaration

let identifier = value
let num, num1 = 1, num2
\num3 // equivalent to let num3

Const declaration

const identifier = value

Variable or value reassignment

identifier = value
array[0] = value

Variable or value reassignment

identifier = value
Object.doSomething = value

🗃️ Arrays

Array creation

new Array(length?)
[0, 1, 2]

Getting an item from an array

array[index]

Getting a slice of an array

// @params start:end[:direction(1 or -1)]
// direction is optional
array[start:end:direction]

Getting the last element of the array

array[]

Reassigning to the last element of the array

array[] = value

🧱 Objects

Object creation

new Object() // not recomended
{ x: 1 }

Accessing items of the object

object.x
object['x']

💬 Strings

String creation

new String() // not recomended
"Hello world"
'Programming is awesome'
`I am a
multiline string!`

String item retraction

"Hello world"[4] // outputs 'o'

String last item retraction

"Hello world"[] // outputs 'd'

String slice

// @params start:end[:direction(1 or -1)]
"Hello world"[0:5:-1] // outputs 'olleH'

The typeof operator returns a string

// returns the type of the value
typeof value
typeof(value)

Ternar operator

Regular JS way

isNaN(value) ? 1 : 0
isNaN(value) ? isFinite(value) ? 1 : 0 : -1

Shortened way

With if else

true if isNaN(value) else false

#️⃣ Numbers

Declaration

// All followings are examples
// of the same Integer 1000
1000
1000.00
1_000
1_000.00

The sizeof operator returns a number

// this returns the length of the object keys
// or if not iterable - 0
sizeof value
sizeof(value)

🔢 BigInt

BigInts are threated as numbers, but return typeof BigInt

1000n
1_000n
// 1000.00n will throw an error
// floating point numbers are not allowed

📑 Statement block scope

Example with if block

if value {
    ...statements
}
if value BEGIN
    ...statements
END
if value do
    statement
if value:
    statement

🚪 LOG, print, WRITE and ERROR keywords

📝 Note: optional parenthesis are accepted

print and LOG

// they do the same thing
// just a syntax sugar
print 10 // console.log(10)
print(10) // console.log(10)
print if defined I_dont_exist // will not print anything unless the condition is truthy!
LOG "hello world" // console.log("hello world")
WRITE
// appends the message to the HTML body element
// equivalent to document.write() method
WRITE "Message" // document.write("Message")
```-->

> ERROR

```javascript
// equivalent to console.error() method
ERROR "Something went wrong"
// console.error("Something went wrong")
ERROR if errorMessage // shows an error if errorMessage is not falsy

🔄 Conditions

Comparision operators

==, !=, ===, !==, >, <, >=, <=, is, is not
// is transforms into ===
// is not transforms into !==

Multivalue comparision

// Note: list of values always must be righthand
name == ('John', 'Danny', 'Charlie')
// automatically transforms into
name == 'John' || name == 'Danny' || name == 'Charlie'

random > (some_number, other_number, 20)
// same as
random > some_number && random > other_number && random > 20
// basically said, you have a callback result for your expression
// whatever the first two arguments are,
// it needs to be at least more, than 20

↔️ Ternary if

num if num > 0
num if num > 0 and num < 5 else num == undefined

num ? num > 0
num ? num > 0 and num < 5 : num == undefined

🚸 If else statements

If statement without else

if num < 0:
    num = 0

if num < 0 {
    num = 0
    num1 = 10
}

if (num < 0):
    num = 0

if (num < 0) {
    num = 0
}

If statement with else

if temperature > 25:
    print "It's hot!"
else print "It's cold!"

Unless statement

unless isAdmin:
    print "You don't have access."
// same as
if (!isAdmin) {
    console.log("You don't have access.");
}

🚄 Functions

Declaration

function a () {
    // ...statements
    return value
}
// if no arguments are carried,
// no parenthesis are required
function a {
    // ...statements
    return value
}
// same as
def a () {
    // ...statements
    return value
}
// or
def a {
    // ...statements
    return value
}

Shortcut for return

return value
// same as
=> value
function add(a, b):=> a + b

Calling functions

add(10, 20)

Typed arguments and args constant

📝 NOTE: every function contains args constant, which is an array representation of arguments object

// this ensures that a and b are integers
// anything else will throw an error
function add(Int a, Int b) {
    return a + b
}
// only strings are allowed
function say(String text) {
    WRITE text // deprecated
}

🧩 Custom types

Declaration

type NotEmptyArray (Array value) {
    if value.length !== 0: => true
}

Notes: type name must start with uppercase letter
Exactly one argument is required

🚧 Debugger

Starting the debugger

if num < 0 {
    debugger
}

🙌 try|catch|finally statement

try without catch and finally

try: isWorking(1)
// same as:
try {
    isWorking(1)
}
// catch block is automatically inserted
// automatically outputs console.warn(err.message)

try with catch

try: isWorking(1)
catch: console.error(err)
// variable err is automatically declared

// same as:
try {
    isWorking(1)
} catch err {
    console.error(err)
}

try with finally

try: isWorking(1)
finally: doSomethingElse()
// same as:
try {
    isWorking(1)
} finally {
    doSomethingElse()
}

👏 Switch cases

Declaration, cases?, default?

switch typeof value {
    case 'String':
        return value
    case 'Number':
    case 'Null':
    case 'Undefined':
    case 'NaN':
        return value + '';
    default: return '';
}

🔛 Loops

Declaration of while loop

while isTrue {
    print true
}
// or
while (isTrue):
    print true

Declaration of for loop

for key in object {
    print object[key]
}
for value of object {
    print value
}
for i of range(0, 10) {
    print i
}
for i from 0 till 10 {
    print i
}
for i from 0 through 10 {
    print i
}
// notice, const or let are alowed here, but not necessary
for i = 0; i < 10; i++ {
    print i
}

☝️ Strict mode

Declaration

'use strict'
// learn more at https://www.w3schools.com/js/js_strict.asp

Interfaces

Declaration

interface Person {
    name: String,
    age: Int,
    children: Person[] | Null
}

Usage

let people = []
function addToArray(Person person) {
    people.push(person)
}
addToArray({
    name: 'John',
    age: 19,
    children: null
})

Operators

Arithmetic Operators

+ Plus
- Minus
* Multiply
/ Divide
% Modulus
** Exponentiation
++ Increment
-- Decrement

Logical Operators

&& Logical and
|| Logical or
!  Logical not

Bitwise operators

&   AND
|   OR
~   NOT
^   XOR
<<  Left shift
>>  Right shift
>>> Unsigned right shift

Type And Size Operators

typeof // describes the type of the object
sizeof // describes the size of the object, or returns null

The instanceof operator

value instanceof Array
// as well as
value not instanceof Array
// or
value !instanceof Array

The in operator

value in object
// as well as
value not in object
// or
value !in object

Pipe Forward And Pipe Back Operators

|> Pipe forward
<| Pipe back
// example
// pipe forward
num + 5 |> Array // Same as Array(num + 5)
num + 5 |> Array(0, 1) // Same as Array(num + 5, 0, 1)
num + 5 |> Array(0, 1, .) // Same as Array(0, 1, num + 5)

'  How\'s it going?   '
    |> escape
    |> trim
    |> write('file.txt', .)

// pipe back

write('file.txt', .)
    <| trim
    <| escape
    <| '  How\'s it going?   '

📏 Custom operators

Declaration

// operator "#" [A-Za-z0-9_\/*+-.&|$@!^#~]:+ ...
operator #/ (Number left, Number right) {
    if isNaN(left / right): return 0
    return left / right;
}

Usage

// outputs 0 instead of NaN
print Infinity #/ Infinity

🤫 More and more is coming soon!

The documentation is not final, and more examples and syntax sugar tricks will be added

We are constantly updating, fixing and adding new features!

📃 License

😉 Free Software, Hell Yeah!

This project is open-sourced software licensed under the MIT License.

See the LICENSE file for more information.

Package Sidebar

Install

npm i basescript.js

Weekly Downloads

26

Version

0.2.72

License

MIT

Unpacked Size

390 kB

Total Files

54

Last publish

Collaborators

  • basescriptjs