Backsharp

Read about:
Backshar | Backshar+
Is this page categorized incorrectly? Feel free to fix it!
"I am really out of ideas now. Backsharp is the best I can come up with. Seriously, 'BS#' looks stupid as fuck. What am I doing with my life?" Threesodas (talk) 22:44, 26 April 2021 (UTC)
Sometimes, we strive for pain. I wanted to simulate that. Here's Backsharp (BS#).
==Syntax==
Unlike Backshar+, Backsharp does not completely use symbols, but is more confusing than Backshar+.
===Basics===
Backsharp splits characters with spaces, but then covers whitespace with periods. For instance, you would write "Hello world and apple banana" like this:
 .h.e.l.l.o.+.w.o.r.l.d.+.a.n.d.+.a.p.p.l.e.+.b.a.n.a.n.a.
Whitespace within whitespace (spaces) is replaced with +s.
Backsharp still uses symbols, but they each mean different things.
Symbol	Use 	Example
@ 	Console (or output zone) 	[@]=>.b.a.c.k.s.h.a.r.p.!.
# 	Variable 	#[x]=>.6.9.
% 	String 	%.h.e.y.+.g.u.y.s...
$ 	User input 	#[x]<=.$.
& 	Function 	&.m.y.^f.u.n.c.
^ 	Uppercase (used in strings)	%.^w.e.l.c.o.m.e.+.^h.o.m.e.
\\ 	Comment 	\\this does action!
===IO functionality===
Print something to console:
 [@]=>.^h.e.l.l.o.+.w.o.r.l.d.
Why?:
Square brackets define the next object to be selected, such as a variable, or in this case, the console.
Then, we use the => operator to tell the object that it should spit something out.
If it were a variable, you'd put [@]=>.[.v.a.r.]. .
Ask for a user's name:
 [@]=>.^w.h.a.t.'.s.+.y.o.u.r.+.n.a.m.e.?.
 #[.n.a.m.e.]<=.$.
 [@]=>.^c.o.o.l.,.+.y.o.u.r.+.n.a.m.e.+.i.s.+.[.n.a.m.e.]...
Notice that if anything in square brackets only has one character, it does not use periods. However, 2+ characters breaks this rule.
Also, this code uses <=, which means it should receive a value, in this case it's the next line from the console.
===Variables===
Variables can be set like this:
 #[.m.y.v.a.r.]=>.v.a.l.u.e.
Print a variable:
 [@]=>.[.m.y.v.a.r.].
Set a variable to another variable:
 #[x]=>[y]
Add two variables together:
 #[z]=>[x].s.u.m.[y]
(See Operators for a full list of math operators).
Unless you're stupid, you won't need to have to define the variable type. Just in case, here's how it's done:
Replace the # with the variable type.
 .s.t.r.i.n.g.
 .b.o.o.l.
 .i.n.t.
 .d.o.u.b.l.e.
 .b.y.t.e.
====Arrays====
Create an array like this:
 .a.r.r.[.c.a.r.s.]=>.%
 .^t.o.y.o.t.a.
 .^v.o.l.v.o.
 .^f.o.r.d.
 %
Equivalent to: string[] cars = { "Toyota", "Volvo", "Ford" };
===Functions===
This is an example of a function:
 &.m.y.f.u.n.c. &.r.e.t.u.r.n.:.v.o.i.d. &.d.e.f.i.n.e.
 #[x]=>.2.0.
 #[y]=>.4.0.
 #[z]=>[y].s.u.b.[x]
 [@]=>.[z].
 &.e.n.d.d.e.f.
Every variable is global by default. Imo, protection keywords are kind of useless. Just don't fucking use the variable later on.
===If/else & switch statements===
Write an if statement like this:
 !.w.h.e.n.(.c.o.n.d.i.t.i.o.n.)
 [@]=>.h.e.l.l.o.!.
 !.e.l.s.e.(.c.o.n.d.i.t.i.o.n.)
 [@]=>.g.o.o.d.b.y.e.!.
 !.e.n.d
Write a switch statement like this:
 ?.s.w.i.t.c.h.(.e.x.p.r.e.s.s.i.o.n.)
 ?.c.a.s.e.(.c.o.n.d.i.t.i.o.n.)
 [@]=>.p.o.o.p.y.
 ?.b.r.e.a.k.
 ?.e.n.d.
 ?.e.n.d.
===Operators===
====Math====
 .s.u.m. : add two things
 .s.u.b. : subtract two things
 .m.u.l. : times two things
 .d.i.v. : divide two things
 .m.o.d. : calculate the modulo of something
 .s.q.t. : calculate the squareroot of something
 .s.q.r. : square something
 .c.b.e. : cube something
====Conditions====
 != : not equal to
 == : equal to
 >= : greater than
 =< : less than
 >> : greater than or equal to
 << : less than or equal to
===Classes===
Define a class like this:
 &&.m.y.c.l.a.s.s. :>
 [@]=>.p.r.i.n.t.+.f.r.o.m.+.m.y.c.l.a.s.s.
 <:
The main class is always .p.r.o.g.r.a.m., which is needed to run a program.
===Miscellaneous===
====System data====
 &&.s.y.s.t.e.m. :> .t.i.m.e.=>#[x] <: : get system time in milliseconds since 2000 (do math to calculate extra stuff)
 &&.s.y.s.t.e.m. :> .o.s.=>#[y] <: : get system os
 &&.s.y.s.t.e.m. :> .b.i.t.t.y.p.e.=>#[z] <: : get system bit type (32/64 bit)
 &&.s.y.s.t.e.m. :> .a.p.p.o.p.e.n.[.a.p.p.n.a.m.e.].=>#[a] <: : check if specified app is open (works with files in general)
==Example programs==
===Simple calculator===
 &&.p.r.o.g.r.a.m. :>
 [@]=>.m.e.t.a.:.c.l.e.a.r. \\this clears the console completely.
 [@]=>.^c.h.o.o.s.e.+.a.n.+.o.p.e.r.a.t.o.r.:.
 [@]=>.^a.d.d.,.+.s.u.b.,.+.m.u.l.t.,.+.d.i.v...
 #[.o.p.e.r.a.t.o.r.]<=.$.
 [@]=>.^i.n.p.u.t.+.n.u.m.b.e.r.+.1...
 #[m]<=.$.
 [@]=>.^i.n.p.u.t.+.n.u.m.b.e.r.+.2...
 #[n]<=.$.
 #[x]=>[m][.o.p.e.r.a.t.o.r.][n]
 [@]=>.^r.e.s.u.l.t.:.+.[.x.].
 <:
Output:
 Choose an operator:
 Add, sub, mult, div.
 input
 Input number 1.
 input
 Input number 2.
 input
 Result: variable
==Family==
Backshar: Prequel
Backshar+: Prequel
Category:languages
Category:functional paradigm
Category:object-oriented paradigm
Category:declarative paradigm
Category:queue-based
Category:high-level