так вот, попытайтесь разрулить такую логику на классике ;))
namespace func_next
{
internal static class Program
{
static void print(this string s) => Console.WriteLine(s);
static void Main(string[] args)
{
var min = 5;
var max = 10;
var value = min - 1;
string welcome() => $"Enter an integer value between {min} and {max}:";
string accepted() => $"Your input value ({value}) has been accepted.";
string repeat() => $"You entered {value}. Please enter a number between {min} and {max}:";
string rch() => $"Range changed. min={min}, max={max} )))";
const string ups = "Sorry, you entered an invalid number, please try again:";
var stop = false;
var valid = false;
var cmd = new List<String>();
bool get() => int.TryParse((cmd = Console.ReadLine().Split().ToList())[0], out value);
bool success() => valid && min <= value && value <= max;
bool command() => cmd[0] == "cmd" &&
(cmd[1] == "min" && (int.TryParse(cmd[2], out min)) ||
(cmd[1] == "max" && (int.TryParse(cmd[2], out max))));
string check() => (valid = get(), command(), stop = success()) switch
{
(_, _, true) => accepted(),
(true, _, false) => repeat(),
(_, true, false) => rch(),
_ => ups
};
for (welcome().print(); !stop; check().print()) ;
}
}
}
так вот, попытайтесь разрулить такую логику на классике ;))
namespace func_next
{
internal static class Program
{
static void print(this string s) => Console.WriteLine(s);
static void Main(string[] args)
{
var min = 5;
var max = 10;
var value = min - 1;
string welcome() => $"Enter an integer value between {min} and {max}:";
string accepted() => $"Your input value ({value}) has been accepted.";
string repeat() => $"You entered {value}. Please enter a number between {min} and {max}:";
string rch() => $"Range changed. min={min}, max={max} )))";
const string ups = "Sorry, you entered an invalid number, please try again:";
var stop = false;
var valid = false;
var cmd = new List<String>();
bool get() => int.TryParse((cmd = Console.ReadLine().Split().ToList())[0], out value);
bool success() => valid && min <= value && value <= max;
bool command() => cmd[0] == "cmd" &&
(cmd[1] == "min" && (int.TryParse(cmd[2], out min)) ||
(cmd[1] == "max" && (int.TryParse(cmd[2], out max))));
string check() => (valid = get(), command(), stop = success()) switch
{
(_, _, true) => accepted(),
(true, _, false) => repeat(),
(_, true, false) => rch(),
_ => ups
};
for (welcome().print(); !stop; check().print()) ;
}
}
}
хотите примеры кода?.. сам посмотрел, может и не так близко.. к примеру посмотрите код тут (мой ответ).. не думаю что это легко по учебникам.. но надеюсь понравится ;)))
Да везде тот же самый V8. А где мультитаскинг, где воркеры - нюансы.угу )).. нюансы.. толи парадигма "не блокирования" (не говорю что она плоха, иначе нода бы не взлетела ;).. или реальные фичи ос/процессоров (ява/шарп)... ;)).. но разная культура мышления.. не так ли? ;)))
Т.е., везде: браузер, сервер, мобильный, десктоп.но в другой норке ))