SlideShare a Scribd company logo
CHAPTER
NINE
WHAT IS NEW IN RING 1.1?
In this chapter we will learn about the changes and new features in Ring 1.1 release.
9.1 List of changes and new features
Ring 1.1 comes with many new features
• Better Natural Language Programming Support
• Generate/Execute Ring Object Files (*.ringo)
• Syntax Flexibility and different styles for I/O and Control Structures
• New Functions and Changes
• StdLib functions and classes written in Ring
• RingLibSDL
• Demo Project - Game Engine for 2D Games
• RingSQLite
• Better Code Generator for Extensions
• Using Self.Attribute in the Class Region to define new attributes
• Using This.Attribute in nested Braces inside the Class Methods
• Better Documentation
9.2 Better Natural Language Programming Support
Ring is an innovative language because of it’s compact syntax, smart implementation (small, transparent & visual) and
it’s ability to create declarative and natural domain specific languages in a fraction of time.
This release add support for calling methods when an expression is evaluated
check this example:
# Natural Code
new program {
Accept 2 numbers then print the sum
}
# Natural Code Implementation
123
Ring Documentation, Release 1.6
class program
# Keywords
Accept=0 numbers=0 then=0 print=0 the=0 sum=0
# Execution
func braceexpreval x
value = x
func getnumbers
for x=1 to value
see "Enter Number ("+x+") :" give nNumber
aNumbers + nNumber
next
func getsum
nSUm = 0
for x in aNumbers nSum+= x next
see "The Sum : " + nSum
private
value=0 aNumbers=[]
Output:
Enter Number (1) :3
Enter Number (2) :4
The Sum : 7
for more information see the “Natural Language Programming” chapter.
9.3 Generate/Execute Ring Object Files (*.ringo)
This feature enable you to distribute your applications without distributing the source code. Also it makes application
distribution a simple process where you get one Ring object file for the complete project (many source code files).
Also using Ring object file remove the loading time required for compiling the application.
Check the “command line options” chapter to know more about this feature.
9.4 Syntax Flexibility and different styles for I/O and Control Struc-
tures
Programmers are sensitive to the programming language syntax. Great programmers know how to work using many
different styles but each programmer may have his/her favorite style.
Each programming language comes with a style that you may like or not. Ring is just one of these languages, but as a
response to many programmers asking for a better syntax we decided to provide more options.
Also some of these features are very necessary for Natural Language Programming.
Example :
We have two commands to change language keywords and operators.
ChangeRingOperator + plus
ChangeRingKeyword see print
Print 5 plus 5
9.3. Generate/Execute Ring Object Files (*.ringo) 124
Ring Documentation, Release 1.6
ChangeRingOperator plus +
ChangeRingKeyword print see
We have new styles (Optional) for Input/Output.
Example :
Put "What is your name? "
Get cName
Put "Hello " + cName
Example :
Load "stdlib.ring"
Print("What is your name? ") # print message on screen
cName=GetString() # get input from the user
print("Hello #{cName}") # say hello!
We have new styles (optional) for control structures.
Example :
While True
Put "
Main Menu
---------
(1) Say Hello
(2) About
(3) Exit
" Get nOption
Switch nOption
Case 1
Put "Enter your name : "
Get name
Put "Hello " + name + nl
Case 2
Put "Sample : using while loop" + nl
Case 3
Bye
Else
Put "bad option..." + nl
End
End
Example :
Load "stdlib.ring"
While True {
print("
Main Menu
---------
(1) Say Hello
(2) About
(3) Exit
9.4. Syntax Flexibility and different styles for I/O and Control Structures 125
Ring Documentation, Release 1.6
")
nOption = GetString()
switch nOption {
case 1
print("Enter your name : ")
name = getstring()
print("Hello #{name}n")
case 2
print("Sample : using switch statementn")
case 3
Bye
else
print("bad option...n")
}
}
Check the next chapters:-
• Getting Started - Second Style
• Getting Started - Third Style
• Control Structures - Second Style - May looks like Lua and Ruby
• Control Structures - Third Style - May looks like C (uses braces)
• Syntax Flexibility
Note: All of these styles are provided automatically by the compiler at the same time, It’s better to select one style for
the same project (you can create your style as a mix from these styles) for example you can use Put/Get and Braces.
9.5 New Functions and Changes
Changed:
• get() function : changed to sysget()
• sort() function : can now work on list of objects
• find() function : can now work on list of objects
Added:
• clockspersecond()
• CurrentDir()
• ExeFileName()
• ChDir()
• ExeFolder()
• varptr()
• space()
• nullpointer()
9.5. New Functions and Changes 126
Ring Documentation, Release 1.6
• object2pointer()
• pointer2object()
Check the next chapters
• System Functions
• Object Oriented Programming (OOP)
• Low Level Functions
9.6 StdLib functions and classes written in Ring
Ring 1.1 comes with a library called StdLib, it’s written in Ring by the help of Ring Team
The library provide a useful group of new functions and classes
Example:
Load "stdlib.ring"
Puts("Test Times()")
Times ( 3 , func { see "Hello, World!" + nl } )
Example:
Load "stdlib.ring"
Puts("Test Map()")
See Map( 1:10, func x { return x*x } )
Example:
Load "stdlib.ring"
Puts("Test Filter()")
See Filter( 1:10 , func x { if x <= 5 return true else return false ok } )
Example:
Load "stdlib.ring"
See "Testing the String Class" + nl
oString = new string("Hello, World!")
oString.println()
oString.upper().println()
oString.lower().println()
oString.left(5).println()
oString.right(6).println()
Example:
Load "stdlib.ring"
oList = new list ( [1,2,3] )
oList.Add(4)
oList.print()
Example:
9.6. StdLib functions and classes written in Ring 127
Ring Documentation, Release 1.6
Load "stdlib.ring"
oStack = new Stack
oStack.push(1)
oStack.push(2)
oStack.push(3)
see oStack.pop() + nl
Example:
Load "stdlib.ring"
oQueue = new Queue
oQueue.add(1)
oQueue.add(2)
oQueue.add(3)
see oQueue.remove() + nl
Example:
Load "stdlib.ring"
ohashtable = new hashtable
See "Test the hashtable Class Methods" + nl
ohashtable {
Add("Egypt","Cairo")
Add("KSA","Riyadh")
see self["Egypt"] + nl
see self["KSA"] + nl
see contains("Egypt") + nl
see contains("USA") + nl
see index("KSA") + NL
print()
delete(index("KSA"))
see copy("*",60) + nl
print()
}
Example:
Load "stdlib.ring"
otree = new tree
See "Test the tree Class Methods" + nl
otree {
set("The first step") # set the root node value
see value() + nl
Add("one")
Add("two")
Add("three") {
Add("3.1")
Add("3.2")
Add("3.3")
see children
}
see children
oTree.children[2] {
Add("2.1") Add("2.2") Add("2.3") {
Add("2.3.1") Add("2.3.2") Add("test")
9.6. StdLib functions and classes written in Ring 128
Ring Documentation, Release 1.6
}
}
oTree.children[2].children[3].children[3].set("2.3.3")
}
see copy("*",60) + nl
oTree.print()
Check the next chapters:
• StdLib Functions
• StdLib Classes
9.7 RingLibSDL
Ring 1.0 provided RingAllegro to be able to create games using the Allegro game programming library
Now Ring 1.1 provide RingLibSDL also so we can have the choice between Allegro or LibSDL
Example:
Load "libsdl.ring"
SDL_Init(SDL_INIT_EVERYTHING)
win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
SDL_Delay(2000)
SDL_DestroyWindow(win)
SDL_Quit()
See the RingLibSDL Chapter.
9.8 Demo Project - Game Engine for 2D Games
In practice we would create a game engine in a language like C/C++ to get the best performance then provide Ring
classes to use the engine.
But many 2D Games are simple and creating a game engine in Ring will be fast enough in many cases
Also this would be a good demo project to learn about the language concepts where we build things using Object Ori-
ented Programming (OOP) then access the power that we have using declarative programming using nested structures
or using natural programming.
In this project we selected the first way (declarative programming using nested structures)
Example:
Load "gameengine.ring" # Give Control to the Game Engine
func main # Called by the Game Engine
oGame = New Game # Create the Game Object
{
title = "My First Game"
text {
x = 10 y=50
animate = false
size = 20
9.7. RingLibSDL 129
Ring Documentation, Release 1.6
file = "fonts/pirulen.ttf"
text = "game development using ring is very fun!"
color = rgb(0,0,0) # Color = black
}
text {
x = 10 y=150
# Animation Part ======================================
animate = true # Use Animation
direction = GE_DIRECTION_INCVERTICAL # Increase y
point = 400 # Continue until y=400
nStep = 3 # Each time y+= 3
#======================================================
size = 20
file = "fonts/pirulen.ttf"
text = "welcome to the real world!"
color = rgb(0,0,255) # Color = Blue
}
Sound { # Play Sound
file = "sound/music1.wav" # Sound File Name
}
} # Start the Events Loop
See the “Demo Project - Game Engine for 2D Games” chapter.
9.9 RingSQLite
Ring 1.0 provided support for ODBC to use any database and provided native support for MySQL.
Now Ring 1.1 provide native support for SQLite database too.
Example:
oSQLite = sqlite_init()
sqlite_open(oSQLite,"mytest.db")
sql = "CREATE TABLE COMPANY(" +
"ID INT PRIMARY KEY NOT NULL," +
"NAME TEXT NOT NULL," +
"AGE INT NOT NULL," +
"ADDRESS CHAR(50)," +
"SALARY REAL );"
sqlite_execute(oSQLite,sql)
sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " +
"VALUES (1, 'Mahmoud', 29, 'Jeddah', 20000.00 ); " +
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " +
"VALUES (2, 'Ahmed', 27, 'Jeddah', 15000.00 ); " +
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" +
"VALUES (3, 'Mohammed', 31, 'Egypt', 20000.00 );" +
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" +
"VALUES (4, 'Ibrahim', 24, 'Egypt ', 65000.00 );"
sqlite_execute(oSQLite,sql)
aResult = sqlite_execute(oSQLite,"select * from COMPANY")
9.9. RingSQLite 130
Ring Documentation, Release 1.6
for x in aResult
for t in x
see t[2] + nl
next
next
see copy("*",50) + nl
for x in aResult
see x["name"] + nl
next
sqlite_close(oSQLite)
9.10 Better Code Generator for Extensions
We are using the code generator (written in Ring) every day to add new libraries to Ring.
The generator is used to create RingQt and RingAllegro
Also in Ring 1.1 it’s used to create RingLibSDL.
more features are added like
• Set/Get structure members (numbers & pointers)
• Using constants
• Better Generated Code
See the Code Generator chapter.
9.11 Using Self.Attribute in the Class Region to define new attributes
We can use Self.Attribute in the Class Region (after the class name and before any methods) to define new attributes.
class Person
name # Define name as attribute if it's not a global variable
address
phone
class person2
self.name # Must Define the attribute
self.address
self.phone
9.12 Using This.Attribute in nested Braces inside the Class Methods
We can use nested braces {} while we are inside methods to access another objects, In this case the current object
scope will be changed while we are inside the brace and Self will point to the object that we access using braces {}. In
this case we can use This.Attribute and This.Method() to access the object that will be created from the current class.
Check the Object Oriented Programming chapter for more information.
Also Check the Weight History Application in GUI Development using RingQt chapter.
9.10. Better Code Generator for Extensions 131
Ring Documentation, Release 1.6
9.13 Better Documentation
Ring 1.1 documentation (800 pages) is better than Ring 1.0 documentation (340 pages)
Many chapters are added for providing better information about the language like
• Language Reference
• Scope Rules
• FAQ
And more!
9.13. Better Documentation 132

More Related Content

PDF
The Ring programming language version 1.7 book - Part 17 of 196
PDF
The Ring programming language version 1.5.1 book - Part 13 of 180
PDF
The Ring programming language version 1.10 book - Part 22 of 212
PDF
The Ring programming language version 1.8 book - Part 39 of 202
PPTX
PPTX
Python 3.6 Features 20161207
ODP
Meetup slides
PDF
The Ring programming language version 1.5.1 book - Part 10 of 180
The Ring programming language version 1.7 book - Part 17 of 196
The Ring programming language version 1.5.1 book - Part 13 of 180
The Ring programming language version 1.10 book - Part 22 of 212
The Ring programming language version 1.8 book - Part 39 of 202
Python 3.6 Features 20161207
Meetup slides
The Ring programming language version 1.5.1 book - Part 10 of 180

What's hot (20)

PPTX
Introduction to Haskell: 2011-04-13
PDF
Clojure, Plain and Simple
PDF
The Ring programming language version 1.8 book - Part 94 of 202
PDF
Cocoaheads Meetup / Alex Zimin / Swift magic
PDF
Grammarware Memes
PPTX
SQL Server Select Topics
PDF
Swift and Kotlin Presentation
PDF
The Ring programming language version 1.7 book - Part 7 of 196
PDF
The Ring programming language version 1.9 book - Part 48 of 210
PDF
Property based Testing - generative data & executable domain rules
PDF
Scala 2013 review
PDF
Scala in Places API
PDF
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
PDF
Kotlin: Why Do You Care?
PDF
Coding in Style
PDF
Dart
PDF
Designing a Functional GraphQL Library
PDF
Clojure made-simple - John Stevenson
PDF
Clojure for Java developers - Stockholm
PDF
Julio Capote, Twitter
Introduction to Haskell: 2011-04-13
Clojure, Plain and Simple
The Ring programming language version 1.8 book - Part 94 of 202
Cocoaheads Meetup / Alex Zimin / Swift magic
Grammarware Memes
SQL Server Select Topics
Swift and Kotlin Presentation
The Ring programming language version 1.7 book - Part 7 of 196
The Ring programming language version 1.9 book - Part 48 of 210
Property based Testing - generative data & executable domain rules
Scala 2013 review
Scala in Places API
Cocoaheads Meetup / Kateryna Trofimenko / Feature development
Kotlin: Why Do You Care?
Coding in Style
Dart
Designing a Functional GraphQL Library
Clojure made-simple - John Stevenson
Clojure for Java developers - Stockholm
Julio Capote, Twitter
Ad

Similar to The Ring programming language version 1.6 book - Part 16 of 189 (20)

PDF
The Ring programming language version 1.5 book - Part 3 of 31
PDF
The Ring programming language version 1.5.2 book - Part 14 of 181
PDF
The Ring programming language version 1.9 book - Part 20 of 210
PDF
The Ring programming language version 1.5.3 book - Part 14 of 184
PDF
The Ring programming language version 1.8 book - Part 18 of 202
PDF
The Ring programming language version 1.3 book - Part 7 of 88
PDF
The Ring programming language version 1.5.3 book - Part 15 of 184
PDF
The Ring programming language version 1.9 book - Part 21 of 210
PDF
The Ring programming language version 1.8 book - Part 19 of 202
PDF
The Ring programming language version 1.9 book - Part 17 of 210
PDF
The Ring programming language version 1.10 book - Part 7 of 212
PDF
The Ring programming language version 1.10 book - Part 21 of 212
PDF
The Ring programming language version 1.5.4 book - Part 14 of 185
PDF
The Ring programming language version 1.2 book - Part 5 of 84
PDF
The Ring programming language version 1.5.2 book - Part 13 of 181
PDF
The Ring programming language version 1.5.1 book - Part 5 of 180
PDF
The Ring programming language version 1.10 book - Part 18 of 212
PDF
The Ring programming language version 1.8 book - Part 15 of 202
PDF
The Ring programming language version 1.5.4 book - Part 11 of 185
PDF
The Ring programming language version 1.3 book - Part 8 of 88
The Ring programming language version 1.5 book - Part 3 of 31
The Ring programming language version 1.5.2 book - Part 14 of 181
The Ring programming language version 1.9 book - Part 20 of 210
The Ring programming language version 1.5.3 book - Part 14 of 184
The Ring programming language version 1.8 book - Part 18 of 202
The Ring programming language version 1.3 book - Part 7 of 88
The Ring programming language version 1.5.3 book - Part 15 of 184
The Ring programming language version 1.9 book - Part 21 of 210
The Ring programming language version 1.8 book - Part 19 of 202
The Ring programming language version 1.9 book - Part 17 of 210
The Ring programming language version 1.10 book - Part 7 of 212
The Ring programming language version 1.10 book - Part 21 of 212
The Ring programming language version 1.5.4 book - Part 14 of 185
The Ring programming language version 1.2 book - Part 5 of 84
The Ring programming language version 1.5.2 book - Part 13 of 181
The Ring programming language version 1.5.1 book - Part 5 of 180
The Ring programming language version 1.10 book - Part 18 of 212
The Ring programming language version 1.8 book - Part 15 of 202
The Ring programming language version 1.5.4 book - Part 11 of 185
The Ring programming language version 1.3 book - Part 8 of 88
Ad

More from Mahmoud Samir Fayed (20)

PDF
The Ring programming language version 1.10 book - Part 212 of 212
PDF
The Ring programming language version 1.10 book - Part 211 of 212
PDF
The Ring programming language version 1.10 book - Part 210 of 212
PDF
The Ring programming language version 1.10 book - Part 208 of 212
PDF
The Ring programming language version 1.10 book - Part 207 of 212
PDF
The Ring programming language version 1.10 book - Part 205 of 212
PDF
The Ring programming language version 1.10 book - Part 206 of 212
PDF
The Ring programming language version 1.10 book - Part 204 of 212
PDF
The Ring programming language version 1.10 book - Part 203 of 212
PDF
The Ring programming language version 1.10 book - Part 202 of 212
PDF
The Ring programming language version 1.10 book - Part 201 of 212
PDF
The Ring programming language version 1.10 book - Part 200 of 212
PDF
The Ring programming language version 1.10 book - Part 199 of 212
PDF
The Ring programming language version 1.10 book - Part 198 of 212
PDF
The Ring programming language version 1.10 book - Part 197 of 212
PDF
The Ring programming language version 1.10 book - Part 196 of 212
PDF
The Ring programming language version 1.10 book - Part 195 of 212
PDF
The Ring programming language version 1.10 book - Part 194 of 212
PDF
The Ring programming language version 1.10 book - Part 193 of 212
PDF
The Ring programming language version 1.10 book - Part 192 of 212
The Ring programming language version 1.10 book - Part 212 of 212
The Ring programming language version 1.10 book - Part 211 of 212
The Ring programming language version 1.10 book - Part 210 of 212
The Ring programming language version 1.10 book - Part 208 of 212
The Ring programming language version 1.10 book - Part 207 of 212
The Ring programming language version 1.10 book - Part 205 of 212
The Ring programming language version 1.10 book - Part 206 of 212
The Ring programming language version 1.10 book - Part 204 of 212
The Ring programming language version 1.10 book - Part 203 of 212
The Ring programming language version 1.10 book - Part 202 of 212
The Ring programming language version 1.10 book - Part 201 of 212
The Ring programming language version 1.10 book - Part 200 of 212
The Ring programming language version 1.10 book - Part 199 of 212
The Ring programming language version 1.10 book - Part 198 of 212
The Ring programming language version 1.10 book - Part 197 of 212
The Ring programming language version 1.10 book - Part 196 of 212
The Ring programming language version 1.10 book - Part 195 of 212
The Ring programming language version 1.10 book - Part 194 of 212
The Ring programming language version 1.10 book - Part 193 of 212
The Ring programming language version 1.10 book - Part 192 of 212

Recently uploaded (20)

PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PDF
AI in Product Development-omnex systems
PPTX
Odoo POS Development Services by CandidRoot Solutions
PPTX
ai tools demonstartion for schools and inter college
PDF
Softaken Excel to vCard Converter Software.pdf
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PPTX
L1 - Introduction to python Backend.pptx
PDF
System and Network Administration Chapter 2
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PDF
Upgrade and Innovation Strategies for SAP ERP Customers
PDF
How Creative Agencies Leverage Project Management Software.pdf
PDF
medical staffing services at VALiNTRY
PDF
PTS Company Brochure 2025 (1).pdf.......
PPTX
Operating system designcfffgfgggggggvggggggggg
PPTX
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PPTX
Introduction to Artificial Intelligence
2025 Textile ERP Trends: SAP, Odoo & Oracle
AI in Product Development-omnex systems
Odoo POS Development Services by CandidRoot Solutions
ai tools demonstartion for schools and inter college
Softaken Excel to vCard Converter Software.pdf
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
Wondershare Filmora 15 Crack With Activation Key [2025
L1 - Introduction to python Backend.pptx
System and Network Administration Chapter 2
Which alternative to Crystal Reports is best for small or large businesses.pdf
Upgrade and Innovation Strategies for SAP ERP Customers
How Creative Agencies Leverage Project Management Software.pdf
medical staffing services at VALiNTRY
PTS Company Brochure 2025 (1).pdf.......
Operating system designcfffgfgggggggvggggggggg
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
Introduction to Artificial Intelligence

The Ring programming language version 1.6 book - Part 16 of 189

  • 1. CHAPTER NINE WHAT IS NEW IN RING 1.1? In this chapter we will learn about the changes and new features in Ring 1.1 release. 9.1 List of changes and new features Ring 1.1 comes with many new features • Better Natural Language Programming Support • Generate/Execute Ring Object Files (*.ringo) • Syntax Flexibility and different styles for I/O and Control Structures • New Functions and Changes • StdLib functions and classes written in Ring • RingLibSDL • Demo Project - Game Engine for 2D Games • RingSQLite • Better Code Generator for Extensions • Using Self.Attribute in the Class Region to define new attributes • Using This.Attribute in nested Braces inside the Class Methods • Better Documentation 9.2 Better Natural Language Programming Support Ring is an innovative language because of it’s compact syntax, smart implementation (small, transparent & visual) and it’s ability to create declarative and natural domain specific languages in a fraction of time. This release add support for calling methods when an expression is evaluated check this example: # Natural Code new program { Accept 2 numbers then print the sum } # Natural Code Implementation 123
  • 2. Ring Documentation, Release 1.6 class program # Keywords Accept=0 numbers=0 then=0 print=0 the=0 sum=0 # Execution func braceexpreval x value = x func getnumbers for x=1 to value see "Enter Number ("+x+") :" give nNumber aNumbers + nNumber next func getsum nSUm = 0 for x in aNumbers nSum+= x next see "The Sum : " + nSum private value=0 aNumbers=[] Output: Enter Number (1) :3 Enter Number (2) :4 The Sum : 7 for more information see the “Natural Language Programming” chapter. 9.3 Generate/Execute Ring Object Files (*.ringo) This feature enable you to distribute your applications without distributing the source code. Also it makes application distribution a simple process where you get one Ring object file for the complete project (many source code files). Also using Ring object file remove the loading time required for compiling the application. Check the “command line options” chapter to know more about this feature. 9.4 Syntax Flexibility and different styles for I/O and Control Struc- tures Programmers are sensitive to the programming language syntax. Great programmers know how to work using many different styles but each programmer may have his/her favorite style. Each programming language comes with a style that you may like or not. Ring is just one of these languages, but as a response to many programmers asking for a better syntax we decided to provide more options. Also some of these features are very necessary for Natural Language Programming. Example : We have two commands to change language keywords and operators. ChangeRingOperator + plus ChangeRingKeyword see print Print 5 plus 5 9.3. Generate/Execute Ring Object Files (*.ringo) 124
  • 3. Ring Documentation, Release 1.6 ChangeRingOperator plus + ChangeRingKeyword print see We have new styles (Optional) for Input/Output. Example : Put "What is your name? " Get cName Put "Hello " + cName Example : Load "stdlib.ring" Print("What is your name? ") # print message on screen cName=GetString() # get input from the user print("Hello #{cName}") # say hello! We have new styles (optional) for control structures. Example : While True Put " Main Menu --------- (1) Say Hello (2) About (3) Exit " Get nOption Switch nOption Case 1 Put "Enter your name : " Get name Put "Hello " + name + nl Case 2 Put "Sample : using while loop" + nl Case 3 Bye Else Put "bad option..." + nl End End Example : Load "stdlib.ring" While True { print(" Main Menu --------- (1) Say Hello (2) About (3) Exit 9.4. Syntax Flexibility and different styles for I/O and Control Structures 125
  • 4. Ring Documentation, Release 1.6 ") nOption = GetString() switch nOption { case 1 print("Enter your name : ") name = getstring() print("Hello #{name}n") case 2 print("Sample : using switch statementn") case 3 Bye else print("bad option...n") } } Check the next chapters:- • Getting Started - Second Style • Getting Started - Third Style • Control Structures - Second Style - May looks like Lua and Ruby • Control Structures - Third Style - May looks like C (uses braces) • Syntax Flexibility Note: All of these styles are provided automatically by the compiler at the same time, It’s better to select one style for the same project (you can create your style as a mix from these styles) for example you can use Put/Get and Braces. 9.5 New Functions and Changes Changed: • get() function : changed to sysget() • sort() function : can now work on list of objects • find() function : can now work on list of objects Added: • clockspersecond() • CurrentDir() • ExeFileName() • ChDir() • ExeFolder() • varptr() • space() • nullpointer() 9.5. New Functions and Changes 126
  • 5. Ring Documentation, Release 1.6 • object2pointer() • pointer2object() Check the next chapters • System Functions • Object Oriented Programming (OOP) • Low Level Functions 9.6 StdLib functions and classes written in Ring Ring 1.1 comes with a library called StdLib, it’s written in Ring by the help of Ring Team The library provide a useful group of new functions and classes Example: Load "stdlib.ring" Puts("Test Times()") Times ( 3 , func { see "Hello, World!" + nl } ) Example: Load "stdlib.ring" Puts("Test Map()") See Map( 1:10, func x { return x*x } ) Example: Load "stdlib.ring" Puts("Test Filter()") See Filter( 1:10 , func x { if x <= 5 return true else return false ok } ) Example: Load "stdlib.ring" See "Testing the String Class" + nl oString = new string("Hello, World!") oString.println() oString.upper().println() oString.lower().println() oString.left(5).println() oString.right(6).println() Example: Load "stdlib.ring" oList = new list ( [1,2,3] ) oList.Add(4) oList.print() Example: 9.6. StdLib functions and classes written in Ring 127
  • 6. Ring Documentation, Release 1.6 Load "stdlib.ring" oStack = new Stack oStack.push(1) oStack.push(2) oStack.push(3) see oStack.pop() + nl Example: Load "stdlib.ring" oQueue = new Queue oQueue.add(1) oQueue.add(2) oQueue.add(3) see oQueue.remove() + nl Example: Load "stdlib.ring" ohashtable = new hashtable See "Test the hashtable Class Methods" + nl ohashtable { Add("Egypt","Cairo") Add("KSA","Riyadh") see self["Egypt"] + nl see self["KSA"] + nl see contains("Egypt") + nl see contains("USA") + nl see index("KSA") + NL print() delete(index("KSA")) see copy("*",60) + nl print() } Example: Load "stdlib.ring" otree = new tree See "Test the tree Class Methods" + nl otree { set("The first step") # set the root node value see value() + nl Add("one") Add("two") Add("three") { Add("3.1") Add("3.2") Add("3.3") see children } see children oTree.children[2] { Add("2.1") Add("2.2") Add("2.3") { Add("2.3.1") Add("2.3.2") Add("test") 9.6. StdLib functions and classes written in Ring 128
  • 7. Ring Documentation, Release 1.6 } } oTree.children[2].children[3].children[3].set("2.3.3") } see copy("*",60) + nl oTree.print() Check the next chapters: • StdLib Functions • StdLib Classes 9.7 RingLibSDL Ring 1.0 provided RingAllegro to be able to create games using the Allegro game programming library Now Ring 1.1 provide RingLibSDL also so we can have the choice between Allegro or LibSDL Example: Load "libsdl.ring" SDL_Init(SDL_INIT_EVERYTHING) win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN) SDL_Delay(2000) SDL_DestroyWindow(win) SDL_Quit() See the RingLibSDL Chapter. 9.8 Demo Project - Game Engine for 2D Games In practice we would create a game engine in a language like C/C++ to get the best performance then provide Ring classes to use the engine. But many 2D Games are simple and creating a game engine in Ring will be fast enough in many cases Also this would be a good demo project to learn about the language concepts where we build things using Object Ori- ented Programming (OOP) then access the power that we have using declarative programming using nested structures or using natural programming. In this project we selected the first way (declarative programming using nested structures) Example: Load "gameengine.ring" # Give Control to the Game Engine func main # Called by the Game Engine oGame = New Game # Create the Game Object { title = "My First Game" text { x = 10 y=50 animate = false size = 20 9.7. RingLibSDL 129
  • 8. Ring Documentation, Release 1.6 file = "fonts/pirulen.ttf" text = "game development using ring is very fun!" color = rgb(0,0,0) # Color = black } text { x = 10 y=150 # Animation Part ====================================== animate = true # Use Animation direction = GE_DIRECTION_INCVERTICAL # Increase y point = 400 # Continue until y=400 nStep = 3 # Each time y+= 3 #====================================================== size = 20 file = "fonts/pirulen.ttf" text = "welcome to the real world!" color = rgb(0,0,255) # Color = Blue } Sound { # Play Sound file = "sound/music1.wav" # Sound File Name } } # Start the Events Loop See the “Demo Project - Game Engine for 2D Games” chapter. 9.9 RingSQLite Ring 1.0 provided support for ODBC to use any database and provided native support for MySQL. Now Ring 1.1 provide native support for SQLite database too. Example: oSQLite = sqlite_init() sqlite_open(oSQLite,"mytest.db") sql = "CREATE TABLE COMPANY(" + "ID INT PRIMARY KEY NOT NULL," + "NAME TEXT NOT NULL," + "AGE INT NOT NULL," + "ADDRESS CHAR(50)," + "SALARY REAL );" sqlite_execute(oSQLite,sql) sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " + "VALUES (1, 'Mahmoud', 29, 'Jeddah', 20000.00 ); " + "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " + "VALUES (2, 'Ahmed', 27, 'Jeddah', 15000.00 ); " + "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" + "VALUES (3, 'Mohammed', 31, 'Egypt', 20000.00 );" + "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" + "VALUES (4, 'Ibrahim', 24, 'Egypt ', 65000.00 );" sqlite_execute(oSQLite,sql) aResult = sqlite_execute(oSQLite,"select * from COMPANY") 9.9. RingSQLite 130
  • 9. Ring Documentation, Release 1.6 for x in aResult for t in x see t[2] + nl next next see copy("*",50) + nl for x in aResult see x["name"] + nl next sqlite_close(oSQLite) 9.10 Better Code Generator for Extensions We are using the code generator (written in Ring) every day to add new libraries to Ring. The generator is used to create RingQt and RingAllegro Also in Ring 1.1 it’s used to create RingLibSDL. more features are added like • Set/Get structure members (numbers & pointers) • Using constants • Better Generated Code See the Code Generator chapter. 9.11 Using Self.Attribute in the Class Region to define new attributes We can use Self.Attribute in the Class Region (after the class name and before any methods) to define new attributes. class Person name # Define name as attribute if it's not a global variable address phone class person2 self.name # Must Define the attribute self.address self.phone 9.12 Using This.Attribute in nested Braces inside the Class Methods We can use nested braces {} while we are inside methods to access another objects, In this case the current object scope will be changed while we are inside the brace and Self will point to the object that we access using braces {}. In this case we can use This.Attribute and This.Method() to access the object that will be created from the current class. Check the Object Oriented Programming chapter for more information. Also Check the Weight History Application in GUI Development using RingQt chapter. 9.10. Better Code Generator for Extensions 131
  • 10. Ring Documentation, Release 1.6 9.13 Better Documentation Ring 1.1 documentation (800 pages) is better than Ring 1.0 documentation (340 pages) Many chapters are added for providing better information about the language like • Language Reference • Scope Rules • FAQ And more! 9.13. Better Documentation 132