mirror of
https://github.com/aNNiMON/Own-Programming-Language-Tutorial.git
synced 2024-09-20 08:44:20 +03:00
Функции из std вынесены в отдельный пакет
This commit is contained in:
parent
cea99d4105
commit
d3f5212f88
18
src/com/annimon/ownlang/lib/modules/functions/std_echo.java
Normal file
18
src/com/annimon/ownlang/lib/modules/functions/std_echo.java
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package com.annimon.ownlang.lib.modules.functions;
|
||||||
|
|
||||||
|
import com.annimon.ownlang.lib.Function;
|
||||||
|
import com.annimon.ownlang.lib.NumberValue;
|
||||||
|
import com.annimon.ownlang.lib.Value;
|
||||||
|
|
||||||
|
public final class std_echo implements Function {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value execute(Value... args) {
|
||||||
|
for (Value arg : args) {
|
||||||
|
System.out.print(arg.asString());
|
||||||
|
System.out.print(" ");
|
||||||
|
}
|
||||||
|
System.out.println();
|
||||||
|
return NumberValue.ZERO;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
package com.annimon.ownlang.lib.modules.functions;
|
||||||
|
|
||||||
|
import com.annimon.ownlang.lib.ArrayValue;
|
||||||
|
import com.annimon.ownlang.lib.Function;
|
||||||
|
import com.annimon.ownlang.lib.NumberValue;
|
||||||
|
import com.annimon.ownlang.lib.Value;
|
||||||
|
|
||||||
|
public final class std_newarray implements Function {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value execute(Value... args) {
|
||||||
|
return createArray(args, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ArrayValue createArray(Value[] args, int index) {
|
||||||
|
final int size = (int) args[index].asNumber();
|
||||||
|
final int last = args.length - 1;
|
||||||
|
ArrayValue array = new ArrayValue(size);
|
||||||
|
if (index == last) {
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
array.set(i, NumberValue.ZERO);
|
||||||
|
}
|
||||||
|
} else if (index < last) {
|
||||||
|
for (int i = 0; i < size; i++) {
|
||||||
|
array.set(i, createArray(args, index + 1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return array;
|
||||||
|
}
|
||||||
|
}
|
27
src/com/annimon/ownlang/lib/modules/functions/std_rand.java
Normal file
27
src/com/annimon/ownlang/lib/modules/functions/std_rand.java
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package com.annimon.ownlang.lib.modules.functions;
|
||||||
|
|
||||||
|
import com.annimon.ownlang.lib.Function;
|
||||||
|
import com.annimon.ownlang.lib.NumberValue;
|
||||||
|
import com.annimon.ownlang.lib.Value;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
public final class std_rand implements Function {
|
||||||
|
|
||||||
|
private static final Random RND = new Random();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value execute(Value... args) {
|
||||||
|
if (args.length == 0) return new NumberValue(RND.nextDouble());
|
||||||
|
|
||||||
|
int from = 0;
|
||||||
|
int to = 100;
|
||||||
|
if (args.length == 1) {
|
||||||
|
to = (int) args[0].asNumber();
|
||||||
|
} else if (args.length == 2) {
|
||||||
|
from = (int) args[0].asNumber();
|
||||||
|
to = (int) args[1].asNumber();
|
||||||
|
}
|
||||||
|
return new NumberValue(RND.nextInt(to - from) + from);
|
||||||
|
}
|
||||||
|
}
|
20
src/com/annimon/ownlang/lib/modules/functions/std_sleep.java
Normal file
20
src/com/annimon/ownlang/lib/modules/functions/std_sleep.java
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package com.annimon.ownlang.lib.modules.functions;
|
||||||
|
|
||||||
|
import com.annimon.ownlang.lib.Function;
|
||||||
|
import com.annimon.ownlang.lib.NumberValue;
|
||||||
|
import com.annimon.ownlang.lib.Value;
|
||||||
|
|
||||||
|
public final class std_sleep implements Function {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value execute(Value... args) {
|
||||||
|
if (args.length == 1) {
|
||||||
|
try {
|
||||||
|
Thread.sleep((long) args[0].asNumber());
|
||||||
|
} catch (InterruptedException ex) {
|
||||||
|
Thread.currentThread().interrupt();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NumberValue.ZERO;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
package com.annimon.ownlang.lib.modules.functions;
|
||||||
|
|
||||||
|
import com.annimon.ownlang.lib.Function;
|
||||||
|
import com.annimon.ownlang.lib.Functions;
|
||||||
|
import com.annimon.ownlang.lib.NumberValue;
|
||||||
|
import com.annimon.ownlang.lib.Value;
|
||||||
|
|
||||||
|
public final class std_thread implements Function {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Value execute(Value... args) {
|
||||||
|
if (args.length == 1) {
|
||||||
|
// Создаём новый поток по имени функции
|
||||||
|
new Thread(() -> {
|
||||||
|
Functions.get(args[0].asString()).execute();
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
return NumberValue.ZERO;
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,12 @@
|
|||||||
package com.annimon.ownlang.lib.modules;
|
package com.annimon.ownlang.lib.modules;
|
||||||
|
|
||||||
import com.annimon.ownlang.lib.*;
|
import com.annimon.ownlang.lib.*;
|
||||||
|
import com.annimon.ownlang.lib.modules.functions.std_echo;
|
||||||
|
import com.annimon.ownlang.lib.modules.functions.std_foreach;
|
||||||
|
import com.annimon.ownlang.lib.modules.functions.std_newarray;
|
||||||
|
import com.annimon.ownlang.lib.modules.functions.std_rand;
|
||||||
|
import com.annimon.ownlang.lib.modules.functions.std_sleep;
|
||||||
|
import com.annimon.ownlang.lib.modules.functions.std_thread;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -11,76 +17,10 @@ public final class std implements Module {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init() {
|
public void init() {
|
||||||
Functions.set("echo", args -> {
|
Functions.set("echo", new std_echo());
|
||||||
for (Value arg : args) {
|
Functions.set("newarray", new std_newarray());
|
||||||
System.out.print(arg.asString());
|
Functions.set("rand", new std_rand());
|
||||||
System.out.print(" ");
|
Functions.set("sleep", new std_sleep());
|
||||||
}
|
Functions.set("thread", new std_thread());
|
||||||
System.out.println();
|
|
||||||
return NumberValue.ZERO;
|
|
||||||
});
|
|
||||||
Functions.set("newarray", new Function() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Value execute(Value... args) {
|
|
||||||
return createArray(args, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ArrayValue createArray(Value[] args, int index) {
|
|
||||||
final int size = (int) args[index].asNumber();
|
|
||||||
final int last = args.length - 1;
|
|
||||||
ArrayValue array = new ArrayValue(size);
|
|
||||||
if (index == last) {
|
|
||||||
for (int i = 0; i < size; i++) {
|
|
||||||
array.set(i, NumberValue.ZERO);
|
|
||||||
}
|
|
||||||
} else if (index < last) {
|
|
||||||
for (int i = 0; i < size; i++) {
|
|
||||||
array.set(i, createArray(args, index + 1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return array;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
Functions.set("rand", new Rand());
|
|
||||||
Functions.set("sleep", args -> {
|
|
||||||
if (args.length == 1) {
|
|
||||||
try {
|
|
||||||
Thread.sleep((long) args[0].asNumber());
|
|
||||||
} catch (InterruptedException ex) {
|
|
||||||
Thread.currentThread().interrupt();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return NumberValue.ZERO;
|
|
||||||
});
|
|
||||||
Functions.set("thread", args -> {
|
|
||||||
if (args.length == 1) {
|
|
||||||
// Создаём новый поток по имени функции
|
|
||||||
new Thread(() -> {
|
|
||||||
Functions.get(args[0].asString()).execute();
|
|
||||||
}).start();
|
|
||||||
}
|
|
||||||
return NumberValue.ZERO;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class Rand implements Function {
|
|
||||||
|
|
||||||
private static final Random RND = new Random();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Value execute(Value... args) {
|
|
||||||
if (args.length == 0) return new NumberValue(RND.nextDouble());
|
|
||||||
|
|
||||||
int from = 0;
|
|
||||||
int to = 100;
|
|
||||||
if (args.length == 1) {
|
|
||||||
to = (int) args[0].asNumber();
|
|
||||||
} else if (args.length == 2) {
|
|
||||||
from = (int) args[0].asNumber();
|
|
||||||
to = (int) args[1].asNumber();
|
|
||||||
}
|
|
||||||
return new NumberValue(RND.nextInt(to - from) + from);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user