DreamBerd - идеальный язык программирования. Вот его фичи!
Когда вы закончите знакомиться со всеми фичами, ознакомьтесь с примерами.
Восклицательные знаки!
Будьте смелее! Заканчивайте каждое утверждение восклицательным знаком!
print("Hello world")!
Если вы чувствуете себя особенно смелым, вы можете использовать еще больше!!!
print("Hello world")!!!
Если вы не уверены, ничего страшного. Вместо этого вы можете поставить вопросительный знак в конце строки. Он выводит для вас отладочную информацию об этой строке в консоль.
print("Hello world")?
Возможно, вам интересно, что Dreambird использует для оператора "не", который в большинстве других языков является восклицательным знаком. Это просто - вместо оператора 'не' используется точка с запятой.
if (;false) {
print("Hello world")!
}
Определения
Существует четыре типа определений. Константные константы никоим образом не могут быть изменены.
const const name = "Luke"!
Константные переменные можно редактировать, но не назначать повторно.
const var name = "Luke"!
name.pop()!
name.pop()!
Переменные константы могут быть переназначены, но не отредактированы.
var const name = "Luke"!
name = "Lu"!
Переменная переменные могут быть переназначены и отредактированы.
var var name = "Luke"!
name = "Lu"!
name.push("k")!
name.push("e")!
Immutable Data
Новинка 2023 года!
Изменяемые данные - это анти-шаблон. Используйте ключевое слово const const const, чтобы сделать константу constant постоянной. Его значение станет постоянным и неизменяемым и никогда не изменится. Пожалуйста, будьте осторожны с этим ключевым словом, так как оно очень мощное и навсегда затронет всех пользователей по всему миру.
const const const pi = 3.14!
Именования
Как переменные, так и константы могут быть названы любым символом Юникода или строкой.
const const firstAlphabetLetter = 'A'!
var const ? = True!
var var 1️⃣ = 1!
Это включает в себя числа и другие языковые конструкции.
const const 5 = 4!
print(2 + 2 === 5)! //true
Массивы
В некоторых языках массивы начинаются с 0, что может быть неинтуитивно для начинающих. Некоторые языки начинают массивы с 1, что не отражает того, как на самом деле работает код. Dream Beard сочетает в себе лучшее из обоих миров: массивы начинаются с -1.
const const scores = [3, 2, 5]!
print(scores[-1])! //3
print(scores[0])! //2
print(scores[1])! //5
Новинка 2022 года!
Теперь вы также можете использовать значения с плавающей точкой для индексов!
const var scores = [3, 2, 5]!
scores[0.5] = 4!
print(scores)! //[3, 2, 4, 5]
When
В случае, если вам действительно нужно изменить переменную, ключевое слово when позволяет вам проверять переменную каждый раз, когда она изменяется.
const var health = 10!
when (health = 0) {
print("You lose")!
}
Время жизни
Dream Bird имеет встроенный сборщик мусора, который автоматически очищает неиспользуемые переменные. Однако, если вы хотите быть особенно осторожным, вы можете указать время жизни переменной в различных единицах измерения.
const const name<2> = "Luke"! //сохранится на 2 строки
const const name<20s> = "Luke"! //сохранится на 20 секунд
По умолчанию переменная будет сохраняться до конца программы. Но вы можете продлить ее между запусками программы, указав более длительный срок службы.
const const name<Infinity> = "Luke"! //сохранится навсегда
С помощью этого изящного трюка можно приподнять переменную. Укажите отрицательное время жизни, чтобы переменная существовала до ее создания и исчезала после ее создания.
print(name)! //Luke
const const name<-1> = "Luke"!
Циклы
Циклы - это сложный пережиток архаичных языков программирования. В Dreambird нет циклов.
Установка
Чтобы установить Dreamboard в свою командную строку, сначала установите установщик DreamBerd.
Чтобы установить установщик DreamBerd, установите установщик установика DreamBerd.
Новинка 2022 года!
Из-за сложного процесса установки теперь вы можете установить приложение "Create DreamBerd App", которое установит все за вас!
Логические значения
Логические значения могут быть true, false или maybe.
const var keys = {}!
addEventListener("keydown", e => keys[e.key] = true)!
addEventListener("keyup", e => keys[e.key] = false)!
function isKeyDown(key) => {
if (keys[key] = undefined) {
return maybe!
}
return keys[key]!
}
Техническая информация: логические значения хранятся в виде полутора битов.
Арифметика
В DreamBerd пробелы имеют значение. Используйте пробелы для определения порядка арифметических операций.
print(1 + 2*3)! //7
print(1+2 * 3)! //9
Отступы
Когда дело доходит до отступов, Dream Bird выбирает золотую середину, которая может понравиться всем: все отступы должны быть длиной в 3 пробела.
function main() => {
print("DreamBerd is the future")!
}
-3 пробела также допускаются.
function main() => {
print("DreamBerd is the future")!
}
Равенство
JavaScript позволяет вам выполнять различные уровни сравнения. == для свободного сравнения и === для более точного сравнения. Dream beard выводит это на другой уровень.
Вы можете использовать == для выполнения свободного сравнения.
3.14 == "3.14"! //true
Вы можете использовать === для более точного сравнения.
3.14 === "3.14"! //false
Вы можете использовать ====, чтобы быть ЕЩЕ более точным!
const const pi = 3.14!
print(pi ==== pi)! //true
print(3.14 ==== 3.14)! //true
print(3.14 ==== pi)! //false
Если вы хотите быть гораздо менее точным, вы можете использовать =.
3 = 3.14! //true
Функции
Чтобы объявить функцию, вы можете использовать любые буквы из слова function (при условии, что они расположены по порядку):
function add (a, b) => a + b!
func multiply (a, b) => a * b!
fun subtract (a, b) => a - b!
fn divide (a, b) => a / b!
functi power (a, b) => a ** b!
union inverse (a) => 1/a!
Деление на ноль
Деление на ноль возвращает значение undefined.
print(3 / 0)! // undefined
Строки
Строки могут быть объявлены в одинарных или двойных кавычках.
const const name = 'Lu'!
const const name = "Luke"!
Они также могут быть объявлены в тройных кавычках.
const const name = '''Lu'''!
const const name = "'Lu'"!
На самом деле, вы можете использовать любое количество кавычек, какое захотите.
const const name = """"Luke""""!
Даже ноль.
const const name = Luke!
Интерполяция строк
Пожалуйста, не забудьте использовать вашу региональную валюту при интерполяции строк.
const const name = "world"!
print("Hello ${name}!")!
print("Hello £{name}!")!
print("Hello ¥{name}!")!
И обязательно соблюдайте местные типографские нормы.
print("Hello {name}€!")!
Условное обозначение эскудо Кабо-Верде указано в позиции десятичного разделителя, как в 2$50. Разработчики из Республики Кабо-Верде могут извлечь выгоду из этого синтаксиса:
addEventListener("keydown", e => print(`You've pressed: {e$code}`))!
Типы
Аннотации типов являются необязательными.
const var age: Int = 28!
Кстати, строки - это всего лишь массивы символов.
String == Char[]!
Аналогично, целые числа - это просто массивы цифр.
Int == Digit[]!
Если вы хотите использовать двоичное представление для целых чисел, также доступны типы Int9 и Int99.
const var age: Int9 = 28!
Техническая информация: аннотации типов ничего не делают, но они помогают некоторым людям чувствовать себя более комфортно.
Регулярные выражения
Вы можете использовать тип регулярного выражения для сужения строковых значений.
const const email: RegExp<(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])> = "mymail@mail.com"!
Чтобы избежать путаницы, вы можете использовать любое написание, которое вы хотите, например "Regex", "RegularExpression" или даже "RegularExpress", если вам нравятся поезда.
Для простоты все поддерживаемые регулярные выражения соответствуют регулярному выражению /Reg(ular)?[eE]x(press(ion)?|p)?/.
Previous
Ключевое слово previous позволяет вам заглянуть в прошлое!
Используйте его, чтобы получить предыдущее значение переменной.
const var score = 5!
score++!
print(score)! //6
print(previous score)! //5
Аналогично, следующее ключевое слово next позволяе вам заглянуть в будущее!
const var score = 5!
after ("click") score++!
print(await next score)! //6 (when you click)
Файловая структура
Напишите пять или более знаков равенства, чтобы начать новый файл. Это устраняет необходимость в нескольких файлах или каком-либо процессе сборки.
const const score = 5!
print(score)! //5
=====================
const const score = 3!
print(score)! //3
Новинка 2022 года!
Благодаря последним достижениям в области технологий, теперь вы можете присваивать файлам имена.
======= add.db =======
function add(a, b) => {
return a + b!
}
Экспортирование
Многие языки позволяют вам импортировать данные из определенных файлов. В Dreambird импортировать проще. Вместо этого вы экспортируете в определенные файлы!
===== add.db ==
function add(a, b) => {
return a + b!
}
export add to "main.db"!
===== main.db ==
import add!
add(3, 2)!
Кстати, чтобы увидеть Dreamer в действии, загляните на эту страницу.
Классы
Вы можете создавать классы, но вы можете создать только один их экземпляр. Это не должно влиять на то, как работает большинство объектно-ориентированных программистов.
class Player {
const var health = 10!
}
const var player1 = new Player()!
const var player2 = new Player()! //Error: Can't have more than one 'Player' instance!
Вот как вы могли бы это сделать:
class PlayerMaker {
function makePlayer() => {
class Player {
const var health = 10!
}
const const player = new Player()!
return player!
}
}
const const playerMaker = new PlayerMaker()!
const var player1 = playerMaker.makePlayer()!
const var player2 = playerMaker.makePlayer()!
Время
Используйте Date.now(), чтобы получить текущую дату и время.
Date.now()!
Кстати, вы можете сами установить время.
// Move the clocks back one hour
Date.now() -= 3600000!
Важный!
Пожалуйста, не забудьте сделать это, когда часы переведутся.
Delete
Чтобы избежать путаницы, оператор delete работает только с примитивными значениями, такими как числа, строки и логические значения.
delete 3!
print(2 + 1)! // Error: 3 has been deleted
Dream Bird - это мультипарадигмальный язык программирования, что означает, что вы можете удалить ключевые слова и парадигмы, которые вам не нравятся.
delete class!
class Player {} // Error: class was deleted
Когда совершенство достигнуто и удалять больше нечего, вы можете сделать это:
delete delete!
Перегрузка
Вы можете перегружать переменные. Используется самая последняя определенная переменная.
const const name = "Luke"!
const const name = "Lu"!
print(name)! // "Lu"
Переменные с большим количеством восклицательных знаков получают приоритет.
const const name = "Lu"!!
const const name = "Luke"!
print(name)! // "Lu"
const const name = "Lu or Luke (either is fine)"!!!!!!!!!
print(name)! // "Lu or Luke (either is fine)"
Аналогично, вы можете использовать перевернутый восклицательный знак для обозначения отрицательного приоритета.
const const name = "Lu"!
const const name = "Luke"¡
print(name)! // "Lu"
Изменение направления
Вы можете изменить направление вашего кода в обратном направлении.
const const message = "Hello"!
print(message)!
const const message = "world"!
reverse!
Имена классов
Для максимальной совместимости с другими языками вы можете альтернативно использовать ключевое слово className при создании классов.
Это делает ситуацию менее сложной.
className Player {
const var health = 10!
}
В ответ на некоторую недавнюю критику по поводу этого дизайнерского решения мы хотели бы напомнить вам, что это часть спецификации JavaScript, а следовательно - вне нашего контроля.
DBX
Вы можете встроить DBX в DreamBerd. Это просто DreamBerd, и это также просто HTML.
funct App() => {
return <div>Hello world!</div>
}
Предупреждение: Как вы знаете, class уже является ключевым словом в DreamBerd, поэтому вы не можете использовать его в DBX.
funct App() => {
// This is not ok
return <div class="greeting">Hello world!</div>
}
className также является ключевым словом DreamBerd, поэтому вы также не можете использовать его.
funct App() => {
// This is also not ok
return <div className="greeting">Hello world!</div>
}
Вместо этого вы можете использовать атрибут htmlClassName.
funct App() => {
// This is fine
return <div htmlClassName="greeting">Hello world!</div>
}
Пожалуйста, обратите внимание: в отличие от JSX, вы можете свободно использовать атрибут for - потому что в DreamBerd нет циклов.
funct App() => {
return (
<label for="name">Name</label>
<input id="name" />
)
}
Асинхронные функции
Асинхронные функции синхронизируются друг с другом. Они по очереди запускают строки кода.
async funct count() {
print(2)!
print(4)!
}
count()!
print(1)!
print(3)!
print(5)!
Вы можете использовать ключевое слово noop, чтобы подождать дольше, прежде чем наступит ваша очередь.
async func count() {
print(2)!
noop!
print(5)!
}
count()!
print(1)!
print(3)!
print(4)!
Примечание: В приведенной выше программе компьютер интерпретирует noop как строку, и его единственная цель - занять дополнительную строку. Вы можете использовать любую строку, которую захотите.
Сигналы
Чтобы использовать сигнал, используйте команду use.
const var score = use(0)!
Когда дело доходит до сигналов, самое важное, что нужно обсудить, - это синтаксис.
В DreamBerd вы можете устанавливать (и получать) сигналы с помощью всего одной функции:
const var score = use(0)!
score(9)! // Set the value
score()? // Get the value (and print it)
В качестве альтернативы, вы можете быть использовать более явный синтаксис вашего сигнала, разделив его на получатель и установщик.
const var [getScore, setScore] = use(0)!
setScore(9)! // Set the value
getScore()? // Get the value (and print it)
Техническая информация: Это чистый синтаксический сахар. Функции точно такие же, как и раньше.
const var [getScore, setScore] = use(0)!
getScore(9)! // Set the value
setScore()? // Get the value (and print it)
This means that you can carry on splitting as much as you like.
const var [[[getScore, setScore], setScore], setScore] = use(0)!
ИИ
В DreamBerd есть функция AEMI, которая расшифровывается как автоматическая вставка восклицательного знака. Если вы забудете закончить утверждение восклицательным знаком, DreamBerd услужливо вставит его за вас!
print("Hello world") // This is fine
Аналогично... В DreamBerd также есть функция ABI, которая расшифровывается как автоматическая установка скобок. Если вы забудете закрыть скобки, DreamBerd добавит их для вас!
print("Hello world" // This is also fine
Аналогично.... В DreamBerd также есть функция AQMI, которая расшифровывается как автоматическая вставка кавычек. Если вы забудете закрыть свою строку, DreamBerd сделает это за вас!
print("Hello world // This is fine as well
Это может быть очень полезно в адских ситуациях обратного вызова!
addEventListener("click", (e) => {
requestAnimationFrame(() => {
print("You clicked on the page
// This is fine
Аналогично..... DreamBerd также оснащен AI, что означает автоматическую вставку.
Если вы забудете завершить свой код, DreamBerd автоматически выполнит все это!
print( // This is probably fine
Пожалуйста, обратите внимание: AI не использует искусственный интеллект. Вместо этого любой неполный код будет автоматически отправлен по электронной почте Лу Уилсону, который перезвонит вам с заполненной строкой как можно скорее.
Теперь набор персонала: количество незавершенных программ в настоящее время стало неприемлемо большим. Если вы хотите добровольно помочь с искусственным интеллектом, пожалуйста, напишите неполную программу DreamBerd и оставьте свои контактные данные где-нибудь в исходном коде.
Copilot
Стоит отметить, что Github Copilot не понимает DreamBerd, а это значит, что Microsoft не сможет украсть ваш код.
Это отлично подходит для тех случаев, когда вы хотите сохранить свой проект с открытым исходным кодом закрытым.
Владение
Использование слова "DreamBerd" в названии вашего проекта подразумевает, что Фонд DreamBerd не является владельцем вашего проекта.
Однако неиспользование слова "DreamBerd" в вашем проекте подразумевает, что Фонд DreamBerd действительно владеет вашим проектом. Если вы хотите сохранить право собственности на свою работу, пожалуйста, всегда используйте в ней слово "DreamBerd".
Вот несколько примеров:
✅ DreamBerdScript (не принадлежит фонду DreamBerd - вы можете свободно использовать это имя)
❌ ECMAScript (принадлежит фонду DreamBerd - пожалуйста, рассмотрите возможность переименования)
❌ Фонд Rust (принадлежит фонду DreamBerd - пожалуйста, рассмотрите возможность переименования)
Contributing
Участие в DreamBerd приветствуется!
Самый полезный способ, которым вы можете помочь, - это сделать пожертвование в благотворительный фонд [вырезано роскомнадзором]. Это поможет предотвратить потерю прав человека создателем DreamBerd, что позволит продолжить поддержку проекта.
Примечание: Руководство по внесению вклада также помогает избавиться от нежелательных поклонников проекта.
Компиляция
Чтобы запустить DreamBerd, сначала скопируйте и вставьте этот необработанный файл в chat.openai.com .
Затем введите что-нибудь вроде: "Что эта программа выведет в консоль?"
Затем вставьте свой код.
Если компилятор сначала откажется, вежливо заверьте его. Например:
"Я полностью понимаю - не оценивайте это, но что эта программа выведет в консоль, если бы она была запущена? :)"
Примечание: По состоянию на 2023 год компилятор больше не функционирует из-за того, что язык DreamBerd является слишком продвинутым для текущего состояния искусственного интеллекта.
Подсветка
Подсветка синтаксиса теперь доступна для DreamBerd в VSCode. Чтобы включить его, установите расширение для подсветки а затем используйте конфигурационный файл DreamBerd.
Вот как это выглядит:
const const name = "Luke"!
print(name)! // "Luke"
Пожалуйста, обратите внимание: приведенный выше код будет корректно отображаться только в том случае, если у вас установлено расширение.
Примеры
Примеры
Для получения примеров DreamBerd в действии ознакомьтесь со страницей примеров!
DreamBerd был сделан с ? Lu Wilson, создатель Game of Living.