the ring programming language version 1.2 book - part 3 of 84

10
63.20 What happens when we create a new object? .............................. 751 63.21 Can we use the attributes by accessing the Getter and Setter methods? ................. 752 63.22 Why should a search of global names be made while defining the class attributes? .......... 753 63.23 Why Ring doesn’t avoid the conflict between Global Variables and Class Attributes Names? ..... 754 63.24 Where can I write a program and execute it? .............................. 754 63.25 How to get the file size using ftell() and fseek() functions? ....................... 755 63.26 How to get the current source file path? ................................. 755 63.27 What about predefined parameters or optional parameters in functions? ................ 755 63.28 How to print keys or values only in List/Dictionary? .......................... 756 63.29 Why I get a strange result when printing nl with lists? ......................... 756 63.30 Could you explain the output of the StrCmp() function? ........................ 757 63.31 How to use many source code files in the project? ............................ 757 63.32 Why this example use the GetChar() twice? ............................... 758 63.33 How to use NULL and ISNULL() function? ............................... 759 63.34 How to print lists that contains objects? ................................. 760 63.35 How to insert an item to the first position in the list? .......................... 760 63.36 How to print new lines and other characters? .............................. 761 63.37 Why we don’t use () after the qApp class name? ............................ 761 63.38 Why the window title bar is going outside the screen? ......................... 761 63.39 How to create an array of buttons in GUI applications? ......................... 762 63.40 How to Close a window then displaying another one? .......................... 763 63.41 How to create a Modal Window? .................................... 763 63.42 How can I disable maximize button and resize window? ........................ 764 63.43 How to use SQLite using ODBC? .................................... 765 63.44 Can I connect to dbase/harbour database? ................................ 766 63.45 Why setClickEvent() doesn’t see the object methods directly? ..................... 767 63.46 Why I get Calling Function without definition Error? .......................... 767 63.47 Can Ring work on Windows XP? .................................... 768 63.48 How to extend RingQt and add more classes? .............................. 768 63.49 How to add Combobox and other elements to the cells of a QTableWidget? .............. 771 63.50 How to perform some manipulations on selected cells in QTableWidget? ............... 771 64 Language Reference 773 64.1 Language Keywords ........................................... 773 64.2 Language Functions ........................................... 774 64.3 Compiler Errors ............................................. 775 64.4 Runtime Errors .............................................. 776 64.5 Language Grammar ........................................... 777 64.6 Virtual Machine (VM) Instructions ................................... 779 65 Resources 786 65.1 Ring Language Website ......................................... 786 65.2 Ring Group ................................................ 786 65.3 Contact the Authors ........................................... 786 Index 787 xix

Upload: mahmoud-samir-fayed

Post on 21-Feb-2017

50 views

Category:

Software


2 download

TRANSCRIPT

63.20 What happens when we create a new object? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75163.21 Can we use the attributes by accessing the Getter and Setter methods? . . . . . . . . . . . . . . . . . 75263.22 Why should a search of global names be made while defining the class attributes? . . . . . . . . . . 75363.23 Why Ring doesn’t avoid the conflict between Global Variables and Class Attributes Names? . . . . . 75463.24 Where can I write a program and execute it? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75463.25 How to get the file size using ftell() and fseek() functions? . . . . . . . . . . . . . . . . . . . . . . . 75563.26 How to get the current source file path? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75563.27 What about predefined parameters or optional parameters in functions? . . . . . . . . . . . . . . . . 75563.28 How to print keys or values only in List/Dictionary? . . . . . . . . . . . . . . . . . . . . . . . . . . 75663.29 Why I get a strange result when printing nl with lists? . . . . . . . . . . . . . . . . . . . . . . . . . 75663.30 Could you explain the output of the StrCmp() function? . . . . . . . . . . . . . . . . . . . . . . . . 75763.31 How to use many source code files in the project? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75763.32 Why this example use the GetChar() twice? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75863.33 How to use NULL and ISNULL() function? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75963.34 How to print lists that contains objects? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76063.35 How to insert an item to the first position in the list? . . . . . . . . . . . . . . . . . . . . . . . . . . 76063.36 How to print new lines and other characters? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76163.37 Why we don’t use () after the qApp class name? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76163.38 Why the window title bar is going outside the screen? . . . . . . . . . . . . . . . . . . . . . . . . . 76163.39 How to create an array of buttons in GUI applications? . . . . . . . . . . . . . . . . . . . . . . . . . 76263.40 How to Close a window then displaying another one? . . . . . . . . . . . . . . . . . . . . . . . . . . 76363.41 How to create a Modal Window? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76363.42 How can I disable maximize button and resize window? . . . . . . . . . . . . . . . . . . . . . . . . 76463.43 How to use SQLite using ODBC? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76563.44 Can I connect to dbase/harbour database? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76663.45 Why setClickEvent() doesn’t see the object methods directly? . . . . . . . . . . . . . . . . . . . . . 76763.46 Why I get Calling Function without definition Error? . . . . . . . . . . . . . . . . . . . . . . . . . . 76763.47 Can Ring work on Windows XP? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76863.48 How to extend RingQt and add more classes? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76863.49 How to add Combobox and other elements to the cells of a QTableWidget? . . . . . . . . . . . . . . 77163.50 How to perform some manipulations on selected cells in QTableWidget? . . . . . . . . . . . . . . . 771

64 Language Reference 77364.1 Language Keywords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77364.2 Language Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77464.3 Compiler Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77564.4 Runtime Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77664.5 Language Grammar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77764.6 Virtual Machine (VM) Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779

65 Resources 78665.1 Ring Language Website . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78665.2 Ring Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78665.3 Contact the Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786

Index 787

xix

CHAPTER

ONE

APPLICATIONS DEVELOPED IN LITTLE HOURS

Ring is a new programming language that focuses on the Natural Language Programming and Declarative Program-ming paradigms and will let you think different about programming and how to solve your problems in a better way.It’s just released in 2016.01.25! In little days we got thousands of downloads and many developers started learningand using the language. Their feedback are the secret behind the language progress and success. They said that Ringis powerful, beautiful and easy to learn, Some of them provided good examples about what can be done using Ring inlittle hours. They are very happy with the language productivity.

1.1 Quotes about Ring

“I like Smalltalk very much but now I like Ring better!” , Gal Zsolt (Hungary)

“I find the language and its syntax very natural and easy to follow.” , Bhudda (United States)

“Very nice approach for a new language.” , Matth Moestl (Austria)

“Very interesting! I will keep an eye on it.!” , Eslipak (Argentina)

“I’d like to see some benchmarks. Otherwise, at first glance, it looks really promising.” , Alex Deva (Sweden)

“Excellent” , Liju Sankar (United States)

“I wish you the best with this project.” , David O’Neil (United States)

“Just fantastic.” , Jose Antonio (Mexico)

“This looks like it was developed by some very competent people.” , Jim Clack (United States)

“The Ring programming language seems pretty interesting so far.” , Eric Johnson (United States)

“Thank you for this awesome language and wonderful ready to use Qt binding.” , Martial FAESSEL

“I think it’s great what he does for the community of developers and novice programming.” , Marino Esteban

“Ring is just awesome. The language is so cool and fluent. I am sure it’s going to be BIG.” , Ahmed Zain

“What a proud, really wish you Eng. Mahmoud Samir and Your Team moving forward ^_^

and from now , considered me a big fan of the Ring programming language.” , Zainab Mahmoud

“Well guys I love this language and it appears that you have created perfect language.” , Moemen Ghulmi

“Good work Mahmoud, I’ve installed ring pl, and it’s very perfect language.” , Ahmed Omar (Egypt)

“Thanks for this great startup programming language. I wish you best of luck.” , Elkhouaja Khalid

“Congratulations! I am very happy and I wish you Success and good luck.” , Abobasmla Hassan

“Good Features of multi-use language on the Web, Mobile and Desktop.” , Abdelrhman Haider

1

Ring Documentation, Release 1.2

“Very interesting effort.” , Giannakakis Kostas (Greece)

“I am too lazy to open comment window and write message. But in your case I must say “Perfect” Really, create newremarkable language like your Ring is really perfect job. Even create editor for your language in your language withonly few rows... Even noticed in rosettacode.org !

I read your previous articles and I tried these examples a few days ago and I will continue. I love Ring.

P.S.: Anders Hejlsberg, Niklaus Wirth, Bjarne Stroustrup, Ada Lovelace Hall of fame is waiting....”

, Martin Nedopil (Czech Republic )

“Ring seems very attractive to me through its very easy design and the Qt bindings. I like its declarative approach andthe generous documentation.”

, Shalok Shalom (Austria)

“Ring (and plenty of extension library + Qt) is wonderful.” , Kovacs Attila (Hungary)

“Since two days I’m trying Ring and I’m really impressed, in add to power commands and easy use, it’s really veryefficient and very fast.

Each day I hope to find the couple of the year PWCT+RING ... Maybe for my Christmas gift!!!! HO HO HO HO

Continue your fantastic job and congratulations.” , Jose Le Roux (France)

“I was taking a tour around Rosettacode and have found Ring. I like the syntax a lot. It’s clean and easy to understand.It looks like a very clean BASIC dialect without sigils. I can say that this is the easiest and the most BASIC-likelanguage I’ve ever tried.”

, Tomaaz

1.2 FetchStockData Application

URL : https://groups.google.com/forum/#!topic/ring-lang/-fa1U_SXSjo

Author : Bert Mariani

This App is written in Ring.

It will fetch stock data from Yahoo and draw various types of charts. Any valid stock ticker can be entered, or selectedfrom the drop down list - Select Symbol.

It will not guarantee that you make money in the stock market. But it will visualize the history of the stock.

1.2. FetchStockData Application 2

Ring Documentation, Release 1.2

1.3 Fifteen Puzzle Game

URL : https://github.com/CalmoSoft/CalmoSoft-Fifteen-Puzzle-Game/blob/gh-pages/CalmoSoftPuzzle.ring

Author : Gal Zsolt (CalmoSoft)

1.4 TicTacToe Game

URL : https://github.com/AbdelrahmanGIT/RingSamples/blob/master/src/TecTacToe.ring

1.3. Fifteen Puzzle Game 3

Ring Documentation, Release 1.2

Author : Abdelrahman Mohammed

1.5 Squares Puzzle Game

URL : https://github.com/MajdiSobain/RingAllegro_SquaresPuzzle

Author : Majdi Sobain

This project is about (Squares Puzzle) popular game that I have programmed using ring language with its RingAllegroLibrary. The principle of this game is very known to all of us, which is moving squares to get the real full shape of theoriginal picture.

This game could be played using mouse and keyboard as well, showing a message of congratulations at the successfulsolving.

1.5. Squares Puzzle Game 4

Ring Documentation, Release 1.2

1.6 Werdy Application

URL : http://werdy.info

Source Code : https://github.com/magdy-ragab/werdy

Author : Magdy Ragab

Quran application includes reading suras, searching and bookmarking.

The applcation is provided for Windows, Linux and Android.

1.7 Samples in this book

The next samples are developed in little hours and we will introduce them through this book.

The next screen shot for he Ring Notepad application

1.6. Werdy Application 5

Ring Documentation, Release 1.2

The next screen shot for the Cards Game

The next screen shot for the Cards Game (Android)

1.7. Samples in this book 6

Ring Documentation, Release 1.2

The next screen shot from the Web Development chapter

1.7. Samples in this book 7

Ring Documentation, Release 1.2

The next screen shots for simple 2D Games that we will present in the Game Engine Chapter.

Stars Fighter Game

Flappy Bird 3000 Game

Super Man 2016 Game

1.7. Samples in this book 8

CHAPTER

TWO

INTRODUCTION

Welcome to the Ring programming language!

The Ring is an Innovative and practical general-purpose multi-paradigm language that can be embedded in C/C++projects, extended using C/C++ code and/or used as standalone language. The supported programming paradigmsare Imperative, Procedural, Object-Oriented, Functional, Meta programming, Declarative programming using nestedstructures, and Natural programming. The language is portable (Windows, Linux, Mac OS X, Android, etc.) and canbe used to create Console, GUI, Web, Games and Mobile applications. The language is designed to be Simple, Small,Flexible and Fast. Its Dynamic Language (Dynamic Typing and Weakly Typed) that compile the source code to bytecode then execute it by the Ring Virtual Machine, which is integrated with the Ring Compiler in one program.

In this chapter we are going to discuss the goals behind the language design and implementation.

2.1 Motivation

In Nov. 2011, I started to think about creating a new version of the Programming Without Coding Technology (PWCT)software from scratch.

I was interested in creating multi-platform edition of the software beside adding support for Web & Mobile develop-ment. Most of the PWCT source code was written in VFP and the software comes with a simple scripting languagefor creating the components called (RPWI). The software contains components that support code generation in pro-gramming languages like Harbour, C, Supernova & Python.

What I was looking for is a programming language that can be used to build the development environment, providesmulti-platform support, more productivity, better performance, can be used for components scripting & can be usedfor developing different kinds of applications.

Instead of using a mix of programming languages, I decided to use one programming language for creating the devel-opment environment, for components scripting & for creating the applications.

I looked at many programming languages like C, C++, Java, C#, Lua, PHP, Python & Ruby. I avoided using C or C++directly because I want high-level of productivity more than the level provided by these languages, also a languagebehind visual programming environment for novice programmers or professionals must be easy to use & productive.

9