21
Sat, Dec
3 New Articles

TechTip: C# for RPGers: More C# and RPG Basic Data Types Compared

General
Typography
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

Let’s continue to explore C#’s data types. This time around, I’ll introduce you to Booleans, strings, and a very important conceptmethods.

 

This TechTip will start where the previous one left off, so if you haven’t read it, it would be a good idea to do so now. I’ll start by adding a Boolean variable to the program I’ve created:

 

bool boolTest = true;

The Boolean data type also has an RPG relative, the IND data type. However, instead of holding an *On (‘1’) or *Off (‘0’) value, this data type expects the more obvious true and false values. Remember that C# is a case-sensitive language, so true is not the same as True. It’s annoying, but you’ll get used to it.

 

I won’t explain what you can do with Booleans, because it’s basically the same in every language, but there’s an important detail I must mention: In RPG, the equals sign (=) is used for both attribution and comparison operations. For instance, you can write something like some_var = 5 and if (some_var = 5) in RPG and the compiler will “know” that the first one refers to an attribution operation and the second to a comparison. However, in C# there’s a difference: You need to use a single equals sign (=) for attribution and a double equals sign (==) for comparison. This means C#’s attribution part is exactly the same as RPG’s, but the comparison is not. To compare the variable some_var with the digit 5 on an If statement, you’d need to write if (some_var == 5).

Boolean variables can be initialized on declaration, just like the other data types I presented before. I didn’t mention this on the previous TechTip, but you can also initialize a variable with an expression. In other words, you can do this:

int aDifferentInteger = 1 + 3;

Naturally, for Boolean variables, you can use a Boolean expression. For instance, the following line of code stores a Boolean value (true or false) resulting from the comparison of the variables usedForCurrency and integerTest:

bool aDifferentBool = (usedForCurrency == integerTest);

I’ll revisit Booleans later, when I discuss the flow control statements C# has to offer.

C# Strings Are Weird

The next data type is a bit trickier. C# strings are similar to RPG’s null-terminated VARCHAR in the sense that you don’t define their length and they end with a special character. However, strings are not a basic data type. A string is really an object (or complex) data type, with some interesting features.

Let’s start with the basic stuff. As you might have gathered, you declare and initialize a string just like any other data type:

string aTextTest = "Hi everyone!";

And you can show its contents just like any of the other data types I mentioned so far:

Console.WriteLine(aTextTest);

Sounds simple enough, right? Here’s where it gets weird. As I mentioned on the prequel article to this series, objects can contain both data and operations. Because strings are objects, they come with some handy operations that I’ll be exploring next.

Exploring the String’s Methods

An object usually has data and operationsor properties and methods, to use object-oriented nomenclature. Let’s start with some methods and leave the properties for later. In RPG, you can convert a string to uppercase with the %Upper built-in function (BIF). A BIF is an RPG language “thing” that exists by itself. In C#, there’s a method that does basically the same thing, but it exists in a certain contextin this case, the ToUpper() method is part of the string’s object definition, a bit like a procedure is part of a service program (via the module where the procedure resides). Here’s an example:

Console.WriteLine(aTextTest.ToUpper());

This is similar to the previous code sample, but it adds the .ToUpper()part and produces a different result. While the first version outputs "Hi everyone!", the value with which the variable was initialized, the second version outputs "HI EVERYONE!". As you might have gathered, the call to the method ToUpper() is what’s causing the different output. There are three important things to know about methods: They’re always part of an object; they require the opening and closing parentheses pair following the name of the method (that’s the way C# “knows” that you’re referring to a method, not a property), and some methods can have parameters, just like RPG functions and procedures.

Now let’s look at another example: the substring operation. RPG has a BIF, and, you guessed it, C# has a method. To be more precise, the string class, which is used as a blueprint for a string object, has a method. And this is how you use it:

Console.WriteLine(aTextTest.Substring(0, 2));

This will output “Hi”, because the aTextTest string contains "Hi everyone!" and the method’s parameters indicate that it should start in position 0 (the value of the first parameter) and return two characters (the value of the second parameter). Note that C# uses a comma to separate the parameters, instead of RPG’s semicolon.

That’s nearly all the space I have for now. Let me close this TechTip with an updated version of our program’s code:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace ExploringDataTypes

{

   class Program

   {

       static void Main(string[] args)

       {

           int integerTest = 0;

           decimal usedForCurrency = 0;

           float aDifferentNumberFormat = 0.01234567890F;

           double andYetAnotherOne = 0.01234567890D;

           bool boolTest = true;

           int aDifferentInteger = 1 + 3;

           bool aDifferentBool = (usedForCurrency == integerTest);

           string aTextTest = "Hi everyone!";

           Console.WriteLine("integerTest's value is " + integerTest

               + ", usedForCurrency holds " + usedForCurrency

               + ", aDifferentNumberFormat's value is " + aDifferentNumberFormat

               + ", while andYetAnotherOne stores " + andYetAnotherOne);

          Console.WriteLine();

           Console.WriteLine(aTextTest);

           Console.WriteLine(aTextTest.ToUpper());

           Console.WriteLine(aTextTest.Substring(0, 2));

           Console.ReadKey();

       }

   }

Next time around, I’ll guide you on a hands-on exploration of the way Visual Studio helps you use an object’s properties and methods. Until then, feel free to leave your comments and questions in the Comments section below.

BLOG COMMENTS POWERED BY DISQUS

LATEST COMMENTS

Support MC Press Online

$

Book Reviews

Resource Center

  • SB Profound WC 5536 Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application. You can find Part 1 here. In Part 2 of our free Node.js Webinar Series, Brian May teaches you the different tooling options available for writing code, debugging, and using Git for version control. Brian will briefly discuss the different tools available, and demonstrate his preferred setup for Node development on IBM i or any platform. Attend this webinar to learn:

  • SB Profound WP 5539More than ever, there is a demand for IT to deliver innovation. Your IBM i has been an essential part of your business operations for years. However, your organization may struggle to maintain the current system and implement new projects. The thousands of customers we've worked with and surveyed state that expectations regarding the digital footprint and vision of the company are not aligned with the current IT environment.

  • SB HelpSystems ROBOT Generic IBM announced the E1080 servers using the latest Power10 processor in September 2021. The most powerful processor from IBM to date, Power10 is designed to handle the demands of doing business in today’s high-tech atmosphere, including running cloud applications, supporting big data, and managing AI workloads. But what does Power10 mean for your data center? In this recorded webinar, IBMers Dan Sundt and Dylan Boday join IBM Power Champion Tom Huntington for a discussion on why Power10 technology is the right strategic investment if you run IBM i, AIX, or Linux. In this action-packed hour, Tom will share trends from the IBM i and AIX user communities while Dan and Dylan dive into the tech specs for key hardware, including:

  • Magic MarkTRY the one package that solves all your document design and printing challenges on all your platforms. Produce bar code labels, electronic forms, ad hoc reports, and RFID tags – without programming! MarkMagic is the only document design and print solution that combines report writing, WYSIWYG label and forms design, and conditional printing in one integrated product. Make sure your data survives when catastrophe hits. Request your trial now!  Request Now.

  • SB HelpSystems ROBOT GenericForms of ransomware has been around for over 30 years, and with more and more organizations suffering attacks each year, it continues to endure. What has made ransomware such a durable threat and what is the best way to combat it? In order to prevent ransomware, organizations must first understand how it works.

  • SB HelpSystems ROBOT GenericIT security is a top priority for businesses around the world, but most IBM i pros don’t know where to begin—and most cybersecurity experts don’t know IBM i. In this session, Robin Tatam explores the business impact of lax IBM i security, the top vulnerabilities putting IBM i at risk, and the steps you can take to protect your organization. If you’re looking to avoid unexpected downtime or corrupted data, you don’t want to miss this session.

  • SB HelpSystems ROBOT GenericCan you trust all of your users all of the time? A typical end user receives 16 malicious emails each month, but only 17 percent of these phishing campaigns are reported to IT. Once an attack is underway, most organizations won’t discover the breach until six months later. A staggering amount of damage can occur in that time. Despite these risks, 93 percent of organizations are leaving their IBM i systems vulnerable to cybercrime. In this on-demand webinar, IBM i security experts Robin Tatam and Sandi Moore will reveal:

  • FORTRA Disaster protection is vital to every business. Yet, it often consists of patched together procedures that are prone to error. From automatic backups to data encryption to media management, Robot automates the routine (yet often complex) tasks of iSeries backup and recovery, saving you time and money and making the process safer and more reliable. Automate your backups with the Robot Backup and Recovery Solution. Key features include:

  • FORTRAManaging messages on your IBM i can be more than a full-time job if you have to do it manually. Messages need a response and resources must be monitored—often over multiple systems and across platforms. How can you be sure you won’t miss important system events? Automate your message center with the Robot Message Management Solution. Key features include:

  • FORTRAThe thought of printing, distributing, and storing iSeries reports manually may reduce you to tears. Paper and labor costs associated with report generation can spiral out of control. Mountains of paper threaten to swamp your files. Robot automates report bursting, distribution, bundling, and archiving, and offers secure, selective online report viewing. Manage your reports with the Robot Report Management Solution. Key features include:

  • FORTRAFor over 30 years, Robot has been a leader in systems management for IBM i. With batch job creation and scheduling at its core, the Robot Job Scheduling Solution reduces the opportunity for human error and helps you maintain service levels, automating even the biggest, most complex runbooks. Manage your job schedule with the Robot Job Scheduling Solution. Key features include:

  • LANSA Business users want new applications now. Market and regulatory pressures require faster application updates and delivery into production. Your IBM i developers may be approaching retirement, and you see no sure way to fill their positions with experienced developers. In addition, you may be caught between maintaining your existing applications and the uncertainty of moving to something new.

  • LANSAWhen it comes to creating your business applications, there are hundreds of coding platforms and programming languages to choose from. These options range from very complex traditional programming languages to Low-Code platforms where sometimes no traditional coding experience is needed. Download our whitepaper, The Power of Writing Code in a Low-Code Solution, and:

  • LANSASupply Chain is becoming increasingly complex and unpredictable. From raw materials for manufacturing to food supply chains, the journey from source to production to delivery to consumers is marred with inefficiencies, manual processes, shortages, recalls, counterfeits, and scandals. In this webinar, we discuss how:

  • The MC Resource Centers bring you the widest selection of white papers, trial software, and on-demand webcasts for you to choose from. >> Review the list of White Papers, Trial Software or On-Demand Webcast at the MC Press Resource Center. >> Add the items to yru Cart and complet he checkout process and submit

  • Profound Logic Have you been wondering about Node.js? Our free Node.js Webinar Series takes you from total beginner to creating a fully-functional IBM i Node.js business application.

  • SB Profound WC 5536Join us for this hour-long webcast that will explore:

  • Fortra IT managers hoping to find new IBM i talent are discovering that the pool of experienced RPG programmers and operators or administrators with intimate knowledge of the operating system and the applications that run on it is small. This begs the question: How will you manage the platform that supports such a big part of your business? This guide offers strategies and software suggestions to help you plan IT staffing and resources and smooth the transition after your AS/400 talent retires. Read on to learn: