Wednesday 28 September 2016

17. Inheritance C# (Basic/Dasar)

C# merupakan bahasa pemrograman yang berorientasi object (OOP) seperti halnya Java. Dalam OOP salah satu konsep terpenting adalah inheritance (Penurunan Sifat dari Object). Dengan inheritance kita dapat menggunakan class atau object yang lain sebagai parent sehingga kita bisa mengubah dan mengambil sifat dari class atau object yang lain untuk membuat object yang baru, dengan cara seperti ini maka akan lebih cepat untuk pembuatan sebuah project.

Dalam pembuatan sebuah class kita tidak selalu harus membuatnya dari awal, kita bisa menurunkan sifat, methods ataupun member dari class lain yang telah ada. Class yang telah ada kita anggap sebagai parent class atau class orang tua sedangkan class yang kita buat dan menurunkan sifat dari parent class kita sebut sebagai child class atau class anak.

Parent Class dan Child Class

Class dapat menurunkan sifat lebih dari satu class yang lain dan juga bisa menurunkan sifat lebih dari satu interface yang lain.

Untuk membuat class yang baru dari class yang lain dalam C# kita bisa menggunakan syntax sebagai berikut:

<acess-specifier> class <base_class>
{
   ...
}
class <derived_class> : <base_class>
{
   ...
}

Berikut adalah contoh program untuk mensimulasikan inheritance, class Shape adalah sebagai parent class sedangkan class Rectangle adalah sebagai child class.

using System;
namespace InheritanceApplication
{
   // Parent class
   class Shape 
   {
      public void setWidth(int w)
      {
         width = w;
      }
      public void setHeight(int h)
      {
         height = h;
      }
      protected int width;
      protected int height;
   }

   // Child class
   class Rectangle: Shape
   {
      public int getArea()
      { 
         return (width * height); 
      }
   }
   
   class RectangleTester
   {
      static void Main(string[] args)
      {
         Rectangle Rect = new Rectangle();

         Rect.setWidth(5);
         Rect.setHeight(7);

         // Print the area of the object.
         Console.WriteLine("Total area: {0}",  Rect.getArea());
         Console.ReadKey();
      }
   }
}

Ketika program dijalankan akan menghasilkan keluaran sebagai berikut:

Total area: 35

Inisialisasi Parent Class

Child class akan menurunkan sifat dari parent class termasuk variable, method serta member parent class yang lain, sehingga kita perlu memanggil constructor dari parent class sebelum child class constructor dibuat. Kita dapat memanggil parent class constructor dengan dengan cara menambahkannya pada inisialisasi list.

Berikut adalah contoh program untuk mengilustrasikan inisialisasi parent class:

using System;
namespace RectangleApplication
{
   class Rectangle
   {
      //member variables
      protected double length;
      protected double width;

      // Parent constructor initialization
      // Will call from child class
      public Rectangle(double l, double w)
      {
         length = l;
         width = w;
      }
      
      public double GetArea()
      {
         return length * width;
      }
      
      public void Display()
      {
         Console.WriteLine("Length: {0}", length);
         Console.WriteLine("Width: {0}", width);
         Console.WriteLine("Area: {0}", GetArea());
      }
   }//end class Rectangle  
   
   // Tabletop class inherit from Rectangle Class
   class Tabletop : Rectangle
   {
      private double cost;

      // Call constructor parent class with base(l, w)
      // for initialization parent class
      // it's mean call Rectangle(l, w)
      // before execute Tabletop contructor body
      public Tabletop(double l, double w) : base(l, w)
      { }
      public double GetCost()
      {
         double cost;
         cost = GetArea() * 70;
         return cost;
      }
      public void Display()
      {
         base.Display();
         Console.WriteLine("Cost: {0}", GetCost());
      }
   }
   class ExecuteRectangle
   {
      static void Main(string[] args)
      {
         Tabletop t = new Tabletop(4.5, 7.5);
         t.Display();
         Console.ReadLine();
      }
   }
}

Setelah program dijalankan akan membarikan hasil sebagai berikut:

Length: 4.5
Width: 7.5
Area: 33.75
Cost: 2362.5

Multiple Inheritance pada C#

C# seperti halnya C++ yang mensuport multiple inheritance, akan tetapi untuk menggunakan multiple inheritance kita musti menggunakan interface.

Contoh program berikut adalah contoh untuk multiple inheritance pada C#:

using System;
namespace InheritanceApplication
{
   // Parent Class Shape
   class Shape 
   {
      public void setWidth(int w)
      {
         width = w;
      }
      public void setHeight(int h)
      {
         height = h;
      }
      protected int width;
      protected int height;
   }

   // Parent class PaintCost
   public interface PaintCost 
   {
      int getCost(int area);

   }
   
   // Derived class
   class Rectangle : Shape, PaintCost
   {
      public int getArea()
      {
         return (width * height);
      }

      // Implement getCost method
      // From PaintCost Interface
      public int getCost(int area)
      {
         return area * 70;
      }
   }
   class RectangleTester
   {
      static void Main(string[] args)
      {
         Rectangle Rect = new Rectangle();
         int area;
         Rect.setWidth(5);
         Rect.setHeight(7);
         area = Rect.getArea();
         
         // Print the area of the object.
         Console.WriteLine("Total area: {0}",  Rect.getArea());
         Console.WriteLine("Total paint cost: ${0}" , Rect.getCost(area));
         Console.ReadKey();
      }
   }
}

Setelah program selesai dijalankan akan memberikan output sebagai berikut:

Total area: 35
Total paint cost: $2450

Ok guys begitulah kira kira sedikit tutorial tentan inheritance di C#, sampai ketemu lagi di tutorial selanjutnya Polymorphism.

Monday 26 September 2016

16. Classes C# (Basic/Dasar)

Ketika kita mendefinisikan class, make kita seperti mendefinisikan sebuah blueprint dari tipe data. Class tidak mendefinisikan aktual data, di dalam class terdapat member dari class seperti variabel dan methods.

Mendefinisikan Class

Class dapat didefinisikan dengan keyword class diikuti dengan nama class, sedangkan body class ditandai dengan curly braces {}.

<access specifier> class  class_name
{
   // member variables
   <access specifier> <data type> variable1;
   <access specifier> <data type> variable2;
   ...
   <access specifier> <data type> variableN;
   // member methods
   <access specifier> <return type> method1(parameter_list)
   {
      // method body
   }
   <access specifier> <return type> method2(parameter_list)
   {
      // method body
   }
   ...
   <access specifier> <return type> methodN(parameter_list)
   {
      // method body
   }
}

  • <access specifier> : Merupakan aturan akses untuk class yang lain, jika class didefinisikan tanpa access specifier maka secara default class tersebut akan mempunyai internal access specifier. Sedangkan default access specifier untuk member class adalah private.
  • <data type>, <return type> : Merupakan hal yang sama yang merupakan tipe data yang dipakai misalnya int, double dll.
  • Untuk mengakses member dari class kita menggunakan dot (.)

using System;
namespace BoxApplication
{
    class Box
    {
       public double length;   // Length of a box
       public double breadth;  // Breadth of a box
       public double height;   // Height of a box
    }
    class Boxtester
    {
        static void Main(string[] args)
        {
            Box Box1 = new Box();   // Declare Box1 of type Box
            Box Box2 = new Box();   // Declare Box2 of type Box
            double volume = 0.0;    // Store the volume of a box here

            // box 1 specification
            Box1.height = 5.0;
            Box1.length = 6.0;
            Box1.breadth = 7.0;

            // box 2 specification
            Box2.height = 10.0;
            Box2.length = 12.0;
            Box2.breadth = 13.0;
           
            // volume of box 1
            volume = Box1.height * Box1.length * Box1.breadth;
            Console.WriteLine("Volume of Box1 : {0}",  volume);

            // volume of box 2
            volume = Box2.height * Box2.length * Box2.breadth;
            Console.WriteLine("Volume of Box2 : {0}", volume);
            Console.ReadKey();
        }
    }
}

Ketika program dijalankan akan memberikan hasil sebagai berikut:

Volume of Box1 : 210
Volume of Box2 : 1560

Member Function and Encapsulation

Member function adalah adalah definisi dalam prototype class, function didefinisikan di dalam class mempunyai akses pada semua member dari class.

Member Variable adalah properti dari class, secara default akan mempunyai hak akses private. Jika variable akan diakses dari class yang lain maka harus didefinisikan sebagai public, protected, internal sesuai dengan desain dari program.

Berikut adalah contoh program untuk mengilustrasikan akses dari member class:

using System;
namespace BoxApplication
{
   class Box
   {
      private double length;   // Length of a box
      private double breadth;  // Breadth of a box
      private double height;   // Height of a box
      public void setLength( double len )
      {
         length = len;
      }
      
      public void setBreadth( double bre )
      {
         breadth = bre;
      }
      
      public void setHeight( double hei )
      {
         height = hei;
      }
      public double getVolume()
      {
         return length * breadth * height;
      }
   }
   class Boxtester
   {
      static void Main(string[] args)
      {
         Box Box1 = new Box();   // Declare Box1 of type Box
         Box Box2 = new Box();
         double volume;
         
         // Declare Box2 of type Box
         // box 1 specification
         Box1.setLength(6.0);
         Box1.setBreadth(7.0);
         Box1.setHeight(5.0);
         
         // box 2 specification
         Box2.setLength(12.0);
         Box2.setBreadth(13.0);
         Box2.setHeight(10.0);
         
         // volume of box 1
         volume = Box1.getVolume();
         Console.WriteLine("Volume of Box1 : {0}" ,volume);
         
         // volume of box 2
         volume = Box2.getVolume();
         Console.WriteLine("Volume of Box2 : {0}", volume);
         
         Console.ReadKey();
      }
   }
}

Hasil keluaran program akan sebagai berikut:

Volume of Box1 : 210
Volume of Box2 : 1560

C# Constructor

Constructor adalah spesial member dari class yang akan dieksekusi ketika object class dibuat. Sebuah constructor mempunyai nama seperti class tetapi tidak memiliki nilai kembalian dan selalu public karena akan diakses dari luar class.

Program berikut ini mengilustrasikan konsep constructor pada class:

using System;
namespace LineApplication
{
   class Line
   {
      private double length;   // Length of a line
      public Line()
      {
         Console.WriteLine("Object is being created");
      }

      public void setLength( double len )
      {
         length = len;
      }
      
      public double getLength()
      {
         return length;
      }

      static void Main(string[] args)
      {
         Line line = new Line();    
         
         // set line length
         line.setLength(6.0);
         Console.WriteLine("Length of line : {0}", line.getLength());
         Console.ReadKey();
      }
   }
}

Setelah program dijalankan akan memberikan hasil sebagai berikut:

Object is being created
Length of line : 6

Default constructor tidak memiliki parameter, tetapi jika kita membutuhkan parameter masukan pada constructor kita bisa membuat constructor dengan variabel. Dengan teknik semacam ini kita bisa menginisialisasi member dalam object class ketika object dibuat.

Berikut adalah contoh program untuk mengilustasikan parameterized constructor:

using System;
namespace LineApplication
{
   class Line
   {
      private double length;   // Length of a line
      public Line(double len)  //Parameterized constructor
      {
         Console.WriteLine("Object is being created, length = {0}", len);
         length = len;
      }

      public void setLength( double len )
      {
         length = len;
      }
      public double getLength()
      {
         return length;
      }

      static void Main(string[] args)
      {
         Line line = new Line(10.0);
         Console.WriteLine("Length of line : {0}", line.getLength()); 
         
         // set line length
         line.setLength(6.0);
         Console.WriteLine("Length of line : {0}", line.getLength()); 
         Console.ReadKey();
      }
   }
}

Setelah program dijalankan akan memberikan keluaran sebagai berikut:

Object is being created, length = 10
Length of line : 10
Length of line : 6

C# Destructor

Destructor pada dasarnya sama dengan constructor yang memberdakan adalah, destructor tidak mempunyai parameter atau dengan kata lain tidak dapat dicustom seperti constructor. Destructor dipanggil ketika object di destroy. Untuk mendefinisikan destructor kita menggunakan prefix tilde (~) sebelum nama destructor.

Destructor akan sangat bermanfaat untuk melepaskan memory yang terpakai ketika kita keluar dari program. Destructor tidak bisa di diturunkan (inheritance) dan overloaded.

Berikut adalah contoh program untuk mengilustrasikan penggunaan destructor:

using System;
namespace LineApplication
{
   class Line
   {
      private double length;   // Length of a line
      public Line()  // constructor
      {
         Console.WriteLine("Object is being created");
      }
      ~Line() //destructor
      {
         Console.WriteLine("Object is being deleted");
      }

      public void setLength( double len )
      {
         length = len;
      }
      
      public double getLength()
      {
         return length;
      }

      static void Main(string[] args)
      {
         Line line = new Line();
         
         // set line length
         line.setLength(6.0);
         Console.WriteLine("Length of line : {0}", line.getLength());           
      }
   }
}

Setelah program dijalankan akan memberikan hasil sebagai berikut:

Object is being created
Length of line : 6
Object is being deleted

Static Member dalam C#

Kita juga bisa mendefinisikan class member sebagai static dengan menggunakan keyword static. Ketika kita mendefinisikan class member sebagai static maka berapa kalipun object class dibuat maka static member tetap hanya ada satu.

Static member hanya akan ada satu meskipun object class dibuat secara berulang ulang, untuk mengakses static member kita tidak harus membuat instance object dari class.

Program berikut akan mengilustrasikan static variabel:

using System;
namespace StaticVarApplication
{
   class StaticVar
   {
      public static int num;
      public void count()
      {
         num++;
      }
      public int getNum()
      {
         return num;
      }
   }
   class StaticTester
   {
      static void Main(string[] args)
      {
         StaticVar s1 = new StaticVar();
         StaticVar s2 = new StaticVar();
         s1.count();
         s1.count();
         s1.count();
         s2.count();
         s2.count();
         s2.count();
         Console.WriteLine("Variable num for s1: {0}", s1.getNum());
         Console.WriteLine("Variable num for s2: {0}", s2.getNum());
         Console.ReadKey();
      }
   }
}

Setelah program dijalankan akan memberikan output sebagai berikut:

Variable num for s1: 6
Variable num for s2: 6

kita juga bisa mendefinisikan method atau function sebagai static member, program berikut mengilustrasikan static method pada class:

using System;
namespace StaticVarApplication
{
   class StaticVar
   {
      public static int num;
      public void count()
      {
         num++;
      }
      public static int getNum()
      {
         return num;
      }
   }
   class StaticTester
   {
      static void Main(string[] args)
      {
         StaticVar s = new StaticVar();
         s.count();
         s.count();
         s.count();
         Console.WriteLine("Variable num: {0}", StaticVar.getNum());
         Console.ReadKey();
      }
   }
}

Keluaran program setelah aplikasi dijalankan adalah sebagai berikut:

Variable num: 3

Ok guys, sampai ketemu di tutorial selanjutnya ya Inheritance.

Friday 16 September 2016

15. Enums C# (Basic/Dasar)

Enumeration adalah merupakan sebuah kumpulan nilai integer yang berlabel, sehingga kita bisa mengakses nilai integer menggunakan index label.

Untuk mendeklarasikan enum kita bisa menggunakan kata kunci enum. Enum adalah bertipe value seperti halnya struct.

Mendeklarasikan enum variabel bisa menggunakan syntax sebagai berikut:

enum  
{
   enumeration list 
};

Dimana,

  • enum_name adalah nama dari tipe enumeration 
  • enumeration list adalah label dari enumeration dipisahkan dengan tanda koma.

Semua nilai dalan enumeration bertipe integer, dan secara default nilai pertama adalah 0 kemudian di increment naik ke nilai selanjutnya.

enum Days { Sun, Mon, tue, Wed, thu, Fri, Sat };

Dimana secara default Sun bernilai 0, Mon bernilai 1, Tue bernilai 2 dan seterusnya.

Berikut adalah contoh tipe program untuk mensimulasikan tipe enum:

using System;
namespace EnumApplication
{
   class EnumProgram
   {
      enum Days { Sun, Mon, tue, Wed, thu, Fri, Sat };

      static void Main(string[] args)
      {
         int WeekdayStart = (int)Days.Mon;
         int WeekdayEnd = (int)Days.Fri;
         Console.WriteLine("Monday: {0}", WeekdayStart);
         Console.WriteLine("Friday: {0}", WeekdayEnd);
         Console.ReadKey();
      }
   }
}

Setelah program selesai dijalankan akan memberikan hasil sebagai berikut:

Monday: 1
Friday: 5

Ok guys cukup itu dulu untuk tutorial kali ini, sampai ketemu di tutorial selanjutnya Classes.

Wednesday 14 September 2016

14. Structure C# (Basic/Dasar)

Hello guys kali ini kita akan membahas tentang structur di C#, structure sangat bermanfaat karena kita bisa memodelkan beberapa tipe data dalam sebuah variabel. Bisa dibilang structure seperti penyimpan data yang bisa kita custom. Untuk mendeklarasikan structure kita bisa menggunakan kata kunci struct.

Misalnya kita ingin menyimpan detail buku dan memodelkannya menjadi sebuah struct maka kita akan menyimpan informasi berikut dalam struct:

  • Title
  • Author
  • Subject
  • Book ID
Mendefinisikan Structure

Untuk mendefinisikan structure, kita bisa menggunakan statement struct. Statement struct akan mendefinisikan tipe data baru dengan member lebih dari satu pada program.

Sebagai contoh kita ingin mendefinisikan informasi buku, maka kita bisa membuat struct untuk tipe data buku.

struct Books
{
   public string title;
   public string author;
   public string subject;
   public int book_id;
}; 

Untuk memperjelas penggunaan struct, program berikut akan mengilustrasikan penggunaan struct:

using System;
struct Books
{
   public string title;
   public string author;
   public string subject;
   public int book_id;
};  

public class testStructure
{
   public static void Main(string[] args)
   {

      Books Book1;   /* Declare Book1 of type Book */
      Books Book2;   /* Declare Book2 of type Book */

      /* book 1 specification */
      Book1.title = "C Programming";
      Book1.author = "Nuha Ali"; 
      Book1.subject = "C Programming Tutorial";
      Book1.book_id = 6495407;

      /* book 2 specification */
      Book2.title = "Telecom Billing";
      Book2.author = "Zara Ali";
      Book2.subject =  "Telecom Billing Tutorial";
      Book2.book_id = 6495700;

      /* print Book1 info */
      Console.WriteLine( "Book 1 title : {0}", Book1.title);
      Console.WriteLine("Book 1 author : {0}", Book1.author);
      Console.WriteLine("Book 1 subject : {0}", Book1.subject);
      Console.WriteLine("Book 1 book_id :{0}", Book1.book_id);

      /* print Book2 info */
      Console.WriteLine("Book 2 title : {0}", Book2.title);
      Console.WriteLine("Book 2 author : {0}", Book2.author);
      Console.WriteLine("Book 2 subject : {0}", Book2.subject);
      Console.WriteLine("Book 2 book_id : {0}", Book2.book_id);       

      Console.ReadKey();

   }
}

Setelah program dijalankan akan memberikan hasil sebagai berikut:

Book 1 title : C Programming
Book 1 author : Nuha Ali
Book 1 subject : C Programming Tutorial
Book 1 book_id : 6495407
Book 2 title : Telecom Billing
Book 2 author : Zara Ali
Book 2 subject : Telecom Billing Tutorial
Book 2 book_id : 6495700

Beberapa Fitur Structure dalam C#

Structure pada C# sedikit berbeda dengan structure dalam C/C++. Structure dalam C# mempunyai fitur sebagai berikut:

  • Structure dapat memiliki methods, fields, indexer, properties, operators and event.
  • Structure dapat memiliki constructor tetapi tidak memiliki destructor. Kita tidak bisa mendefinisikan default constructor karena default constructor sudah terdefinisi secara otomatis dan tidak bisa di ubah.
  • Tidak seperti class, structure tidak bisa menurunkan dari structure yang lain atau class yang lain.
  • Structure dapat mengimplementasikan satu atau lebih interface.
  • Structure member tidak dapat dideklarasikan sebagai abstract, virtual atau protected.
  • Ketika structure object diinisialisasi dengan new operator, akan membuat object sesuai dengan constructor yang dipanggil.
  • Tidak seperti class, structure dapat dibuat dengan atau tanpa new operator.
  • Jika new operator tidak digunakan, semua field akan dibiarkan tidak terinisialisasi dan object tidak dapat digunakan sampai semua field terinisialisasi.
Class Versus Structure

Class dan structure mempunyai beberapa perbedaan mendasar:
  • Class adalah Reference Types, sedangkan Structure adalah Value Type
  • Structure tidak bisa inheritance
  • Structure tidak boleh mempunyai default constructor, karena otomatis sudah dibuat dan tidak bisa diubah
Baiklah untuk memperjelas pembahasan ini kita buat simulasi program untuk class dan structure:

using System;
struct Books
{
   private string title;
   private string author;
   private string subject;
   private int book_id;
   public void getValues(string t, string a, string s, int id)
   {
      title = t;
      author = a;
      subject = s;
      book_id = id;
   }
   public void display()
   {
      Console.WriteLine("Title : {0}", title);
      Console.WriteLine("Author : {0}", author);
      Console.WriteLine("Subject : {0}", subject);
      Console.WriteLine("Book_id :{0}", book_id);
   }

};  

public class testStructure
{
   public static void Main(string[] args)
   {

      Books Book1 = new Books();   /* Declare Book1 of type Book */
      Books Book2 = new Books();   /* Declare Book2 of type Book */

      /* book 1 specification */
      Book1.getValues("C Programming",
      "Nuha Ali", "C Programming Tutorial",6495407);

      /* book 2 specification */
      Book2.getValues("Telecom Billing",
      "Zara Ali", "Telecom Billing Tutorial", 6495700);

      /* print Book1 info */
      Book1.display();

      /* print Book2 info */
      Book2.display(); 

      Console.ReadKey();

   }
}

Berikut adalah hasil output program tersebut:

Title : C Programming
Author : Nuha Ali
Subject : C Programming Tutorial
Book_id : 6495407
Title : Telecom Billing
Author : Zara Ali
Subject : Telecom Billing Tutorial
Book_id : 6495700

Ok guys semoga makin mahir dan tetap semangat mengasah skill pemrograman kalian, sampai ketemu di tutorial selanjutnya Enums.

Monday 12 September 2016

13. String C# (Basic/Dasar)

Dalam C# String dapat dibuat dengan array character, tetapi lebih baik menggunakan kata kunci string untuk mendeklarasikan string. String merupakan alias dari class library System.String.

Membuat String Object

Ada beberapa cara untuk mendeklarasikan string:

  • Menggunakan String Variabel
  • Menggunakan String Class Object
  • Menggunakan concatenate string (+)
  • Memanggil method sebuah object yang mengembalikan nilai string
  • Memanggil format method yang mengkonversi nilai sebuah object menjadi representasi string
Contoh program berikut ini akan mengilustrasikan penggunaan string:

using System;
namespace StringApplication
{
   class Program
   {
      static void Main(string[] args)
      {
         //from string literal and string concatenation
         string fname, lname;
         fname = "Rowan";
         lname = "Atkinson";
         
         string fullname = fname + lname;
         Console.WriteLine("Full Name: {0}", fullname);
         
         //by using string constructor
         char[] letters = { 'H', 'e', 'l', 'l','o' };
         string greetings = new string(letters);
         Console.WriteLine("Greetings: {0}", greetings);
         
         //methods returning string
         string[] sarray = { "Hello", "From", "Tutorials", "Point" };
         string message = String.Join(" ", sarray);
         Console.WriteLine("Message: {0}", message);
         
         //formatting method to convert a value
         DateTime waiting = new DateTime(2012, 10, 10, 17, 58, 1);
         string chat = String.Format("Message sent at {0:t} on {0:D}", waiting);
         Console.WriteLine("Message: {0}", chat);
      }
   }
}

Keluaran dari program diatas adalah sebagai berikut:

Full Name: Rowan Atkinson
Greetings: Hello
Message: Hello From Tutorials Point
Message: Message sent at 5:58 PM on Wednesday, October 10, 2012

String adalah object class dalam C# sehingga akan mempunyai properti serta method class. Banyak sekali fungis dalam string yang bisa kita manfaatkan mungkin dalam bahasa pemrograman yang lain mempunyai method dan properti yang berbeda, yang terpenting adalah kita tau konsep apa itu string. Untuk melihat library string yang lengkap C# kita bisa merujuk ke dokumentasi MSDN https://msdn.microsoft.com/en-us/library/system.string(v=vs.110).aspx.

Berikut adalah contoh untuk mendemonstrasikan beberapa method dalam object class string C#:

Program untuk Membandingkan String

using System;
namespace StringApplication
{
   class StringProg
   {
      static void Main(string[] args)
      {
         string str1 = "This is test";
         string str2 = "This is text";

         if (String.Compare(str1, str2) == 0)
         {
            Console.WriteLine(str1 + " and " + str2 +  " are equal.");
         }
         else
         {
            Console.WriteLine(str1 + " and " + str2 + " are not equal.");
         }
         Console.ReadKey() ;
      }
   }
}

Hasil dari program setelah dieksekusi adalah sebagai berikut:

This is test and This is text are not equal.

Mengecek String di dalam String

using System;
namespace StringApplication
{
   class StringProg
   {
      static void Main(string[] args)
      {
         string str = "This is test";
         if (str.Contains("test"))
         {
            Console.WriteLine("The sequence 'test' was found.");
         }
         Console.ReadKey() ;
      }
   }
}

Setelah program dieksekusi akan memberikan output sebagai berikut:

The sequence 'test' was found.

Mengambil Bagian dari Sebuah String

using System;
namespace StringApplication
{
   class StringProg
   {
      static void Main(string[] args)
      {
         string str = "Last night I dreamt of San Pedro";
         Console.WriteLine(str);
         string substr = str.Substring(23);
         Console.WriteLine(substr);
      }
   }
}

Setelah program dijalankan akan memberikan output sebagai berikut:

San Pedro

Menyatukan String (Joining)

using System;
namespace StringApplication
{
   class StringProg
   {
      static void Main(string[] args)
      {
         string[] starray = new string[]{"Down the way nights are dark",
         "And the sun shines daily on the mountain top",
         "I took a trip on a sailing ship",
         "And when I reached Jamaica",
         "I made a stop"};

         string str = String.Join("\n", starray);
         Console.WriteLine(str);
      }
   }
}

Setelah program dijalankan akan memberikan output sebagai berikut:

Down the way nights are dark
And the sun shines daily on the mountain top
I took a trip on a sailing ship
And when I reached Jamaica
I made a stop

Ok guys tetap semangat guys belajar pemrograman yah, sampai ketemu di tutorial selanjutnya Stucture.

Friday 9 September 2016

12. Arrays C# (Basic/Dasar)

Array merupakan tipe data yang menyimpan beberapa tipe data yang sama dalam satu wadah/kontainer dengan panjang wadah/kontainer yang tetap tidak bisa diubah panjangnya. Atau bisa dikatakan kalau arrays merupakan sekumpulan varibel yang disimpan dengan lokasi memory yang berurutan.

Tidak seperti halnya variabel yang mendefinisikan data tunggal, array disusun secara berurutan dengan menggunakan index, sehingga untuk mengakses nilai dalam array menggunakan index misalnya kita punya array A dengan panjang 2, maka kita dapat mengakses data pada array tersebut dengan menggunakan index sebagai A[0] sebagai index pertama dan A[1] sebagai index kedua dan begitu seterusnya. Index pada array dimulai dari 0.

Array tersusun dari lokasi memori yang berurutan, alamat memori rendah adalah elemen awal sedangkan alamat memori tertinggi adalah element terakhir.


Deklarasi Array

Mendeklarasikan array adalah dengan format syntax sebagai berikut:

datatype[] arrayName;


  • datatype - Adalah merupakan tipe data dari element array.
  • [] - Adalah untuk mendefinisikan sebagai array, adalah untuk menunjukkan ukuran panjang dari array.
  • arrayName - Adalan nama dari array.
Sebagai contoh:

double[] balance;

Inisialisasi Array

Sebelum meninisialisasi array, array tidak akan dapat diisi. Sehinggan untuk dapat menggunakan array perlu adanya inisialisasi array termasuk panjang array yang akan dipesan.

Untuk menginisialisasi array dapat menggunakan kata kunci new untuk membuat object array.

double[] balance = new double[10];

Statement diatas berarti kita telah menginisialisasi array dengan panjang array 10 element.

Mengisi Nilai Array

Kita dapat mengisi nilai array setelah inisialisasi dengan cara memanggil index dan mengisinya dengan nilai:

double[] balance = new double[10];
balance[0] = 4500.0;

Kita juga bisa mengisi array ketika kita mendeklarasikan array:

double[] balance = { 2340.0, 4523.69, 3421.0};

Kita juga bisa mengisi array ketika kita menginisialisasi array:

int [] marks = new int[5]  { 99,  98, 92, 97, 95};

Kita juga bisa menghilangkan panjang array ketika menginisialisasi nilai, karena panjangnya akan otomatis terdefinisi:

int [] marks = new int[]  { 99,  98, 92, 97, 95};

Ketika kita mendefinisikan array tanpa nilai, maka array tersebut secara otomatis akan mengisinya dengan nilai default dari tipe data, misalnya array integer (int) akan secara default bernilai 0.

Mengakses Element Array

Mengakses element array bisa menggunakan index array dimulai dari index 0 yang merupakan index pertama dari sebuah array:

Contoh mengakses index ke 9 dari array:

double salary = balance[9];

Berikut adalah contoh program untuk mengilustrasikan konsep deklarasi, inisialisasi, pengisian serta mengakses array:

using System;
namespace ArrayApplication
{
   class MyArray
   {
      static void Main(string[] args)
      {
         int []  n = new int[10]; /* n is an array of 10 integers */
         int i,j;

         /* initialize elements of array n */
         for ( i = 0; i < 10; i++ )
         {
            n[i] = i + 100;
         }
         
         /* output each array element's value */
         for (j = 0; j < 10; j++ )
         {
            Console.WriteLine("Element[{0}] = {1}", j, n[j]);
         }
         Console.ReadKey();
      }
   }
}

Keluaran program setelah dijalankan:

Element[0] = 100
Element[1] = 101
Element[2] = 102
Element[3] = 103
Element[4] = 104
Element[5] = 105
Element[6] = 106
Element[7] = 107
Element[8] = 108
Element[9] = 109

Menggunakan Foreach Loop untuk Mengakses Array

Pada contoh program sebelumnya kita telah menggunakan for loop untuk mengkases array, kita juga bisa mengakses array menggunakan foreach loop.

Berikut adalah program untuk akses array menggunakan foreach loop:

using System;
namespace ArrayApplication
{
   class MyArray
   {
      static void Main(string[] args)
      {
         int []  n = new int[10]; /* n is an array of 10 integers */
         
         /* initialize elements of array n */
         for ( int i = 0; i < 10; i++ )
         {
            n[i] = i + 100;
         }
         
         /* output each array element's value */
         foreach (int j in n )
         {
            int i = j-100;
            Console.WriteLine("Element[{0}] = {1}", i, j);
            
         }
         Console.ReadKey();
      }
   }
}

Hasil keluaran program setelah dijalankan:

Element[0] = 100
Element[1] = 101
Element[2] = 102
Element[3] = 103
Element[4] = 104
Element[5] = 105
Element[6] = 106
Element[7] = 107
Element[8] = 108
Element[9] = 109

Beberapa Konsep Penting dalam C# Array

1. Array Multidimensi

Seperti dalam bahasa pemrograman yang lain C# juga bisa mendefinisikan array dalam multidimensi atau sering disebut dengan rectangular array.

Misalnya kita ingin mendeklarasikan array 2 dimensi dengan tipe data String, maka dapat dilakukan dengan cara sebagai berikut:

string [,] names;

Untuk array 3 dimensi bisa kita deklarasikan sebagai berikut:

int [ , , ] m;

Bentuk array multi dimensi yang paling mudah adalah array 2 dimensi, bisa dikatakan array 2 dimensi adalah list dari array satu dimensi.

Array dua dimensi bisa digambarkan sebagai sebuah tabel yang mempunyai kolom dan baris, berikut adalah ilustrasi tabel untuk array 2 dimensi yang terdiri dari 3 baris dan 4 kolom.


Elemen dari array dapat diakses dengan a[i, j], dimana a adalah nama dari array sedangkan i adalah index baris dan j adalah index kolom.

Untuk melakukan inisialisasi array 2 dimensi adalah sebagai berikut:

int [,] a = new int [3,4] {
   {0, 1, 2, 3} ,   /*  initializers for row indexed by 0 */
   {4, 5, 6, 7} ,   /*  initializers for row indexed by 1 */
   {8, 9, 10, 11}   /*  initializers for row indexed by 2 */
};

Untuk mengakses array dua dimensi kita menggunakan index baris dan kolom:

int val = a[2,3];

Untuk memperjelas marilah kita coba program berikut ini:

using System;
namespace ArrayApplication
{
   class MyArray
   {
      static void Main(string[] args)
      {
         /* an array with 5 rows and 2 columns*/
         int[,] a = new int[5, 2] {{0,0}, {1,2}, {2,4}, {3,6}, {4,8} };
         int i, j;
         
         /* output each array element's value */
         for (i = 0; i < 5; i++)
         {
            for (j = 0; j < 2; j++)
            {
               Console.WriteLine("a[{0},{1}] = {2}", i, j, a[i,j]);
            }
         }
         Console.ReadKey();
      }
   }
}

Setelah program dijalankan akan memberikan hasil sebagai berikut:

a[0,0]: 0
a[0,1]: 0
a[1,0]: 1
a[1,1]: 2
a[2,0]: 2
a[2,1]: 4
a[3,0]: 3
a[3,1]: 6
a[4,0]: 4
a[4,1]: 8

2. Jagged Array

Jagged array adalah array di dalam array, memang sangat rumit untuk pemula jika berhadapan dengan jagged array termasuk saya :-). Tetapi akan sangat menantang ketika kita mengolah data jagged array :-).

Untuk mendefinisikan jagged array adalah sebagai berikut:

int [][] scores;

Sedangkan untuk menginisialisasi dan mengisi jagged array bisa dengan cara sebagai berikut:

int[][] scores = new int[5][];
for (int i = 0; i < scores.Length; i++) 
{
   scores[i] = new int[4];
}

Kita juga bisa menginisialisasi jagged array dengan cara sebagai berikut:

int[][] scores = new int[2][]{new int[]{92,93,94},new int[]{85,66,87,88}};

Dimana scores mempunyai 2 element yaitu element index 0 yang berupa array dengan panjang 3 dan element dengan index 1 yang berupa array dengan index 1.

Agar lebih gamblang mari kita mengilustrasikannya dengan sebuah program:

using System;
namespace ArrayApplication
{
   class MyArray
   {
      static void Main(string[] args)
      {
         /* a jagged array of 5 array of integers*/
         int[][] a = new int[][]{new int[]{0,0},new int[]{1,2},new int[]{2,4},new int[]{ 3, 6 }, new int[]{ 4, 8 } };
         int i, j;
         
         /* output each array element's value */
         for (i = 0; i < 5; i++)
         {
            for (j = 0; j < 2; j++)
            {
               Console.WriteLine("a[{0}][{1}] = {2}", i, j, a[i][j]);
            }
         }
         Console.ReadKey();
      }
   }
}

Hasil keluaran program adalah sebagai berikut:

a[0][0]: 0
a[0][1]: 0
a[1][0]: 1
a[1][1]: 2
a[2][0]: 2
a[2][1]: 4
a[3][0]: 3
a[3][1]: 6
a[4][0]: 4
a[4][1]: 8

3. Array Sebagai Parameter Method

Kita bisa melewatkan array sebagai parameter method, berikut adalah contoh untuk mengilustrasikannya:

using System;
namespace ArrayApplication
{
   class MyArray
   {
      double getAverage(int[] arr, int size)
      {
         int i;
         double avg;
         int sum = 0;
         for (i = 0; i < size; ++i)
         {
            sum += arr[i];
         }
         avg = (double)sum / size;
         return avg;
      }
      
      static void Main(string[] args)
      {
         MyArray app = new MyArray();
         
         /* an int array with 5 elements */
         int [] balance = new int[]{1000, 2, 3, 17, 50};
         double avg;

         /* pass pointer to the array as an argument */
         avg = app.getAverage(balance, 5 ) ;

         /* output the returned value */
         Console.WriteLine( "Average value is: {0} ", avg );
         Console.ReadKey();
      }
   }
}

Setelah program dijalankan akan memberikan hasil sebagai berikut:

Average value is: 214.4

4. Sebagai Parameter Jika kita tidak yakin berapa panjang parameter yang akan dimasukkan

Array juga berguna untuk parameter method jika kita tidak yakin berapa panjang parameter yang akan diterima oleh method. Program berikut ini mengilustrasikan bagaimana array sangat berguna hehe:

using System;
namespace ArrayApplication
{
   class ParamArray
   {
      public int AddElements(params int[] arr)
      {
         int sum = 0;
         foreach (int i in arr)
         {
            sum += i;
         }
         return sum;
      }
   }
      
   class TestClass
   {
      static void Main(string[] args)
      {
         ParamArray app = new ParamArray();
         int sum = app.AddElements(512, 720, 250, 567, 889);
         Console.WriteLine("The sum is: {0}", sum);
         Console.ReadKey();
      }
   }
}

Setelah program dijalankan akan memberikan hasil sebagai berikut:

The sum is: 2938

Ok guys sampai ketemu di tutorial selanjutnya Strings, jangan pernah menyerah jadi programmer karena akan menjadi perkerjaan yang paling banyak dicari.

Tuesday 6 September 2016

11. Nullable C# (Basic/Dasar)

Hi guys kita bertemu kembali dalam tutorial konsep pemrograman denga C#, kali ini kita akan membahas tentang Nullable Type. Nullable type adalah tipe data yang dapat diisi dengan tipe null. Misalnya pada tipe data int kita dapat mengisinya dengan -2,147,483,648 sampai 2,147,483,647 atau bisa juga dengan null. Atau tipe data bool dapat kita isi dengan true, false atau juga null.

Berikut adalah format syntax untuk mendeklarasikan nullable data:

<data_type> ? <variable_name> = null;

Berikut adalah contoh program untuk mensimulasikan nullable:

using System;
namespace CalculatorApplication
{
   class NullablesAtShow
   {
      static void Main(string[] args)
      {
         int? num1 = null;
         int? num2 = 45;
         double? num3 = new double?();
         double? num4 = 3.14157;
         
         bool? boolval = new bool?();

         // display the values
         
         Console.WriteLine("Nullables at Show: {0}, {1}, {2}, {3}",
                            num1, num2, num3, num4);
         Console.WriteLine("A Nullable boolean value: {0}", boolval);
         Console.ReadLine();
      }
   }
}

Setelah program dijalankan keluaran program akan menghasilkan output sebagai berikut:

Nullables at Show: , 45,  , 3.14157
A Nullable boolean value:

Null Coalescing Operator (??)

Simbol ini bisa digunakan untuk nullable type dan reference type. Apa sebenarnya guna dari operator ??, fungsinya adalah untuk melekukan pengecekan jika nilai bertama bernilai null maka akan mengembalikan nilai kedua. Tetapi jika nilai pertama tidak bernilai null maka nilai pertama akan dikembalikan.

Berikut adalah contoh format untuk ?? operator:

double a = 3.14;
double? b = null;
double? c = a ?? b;

Dari statement diatas nilai c akan sama dengan nilai pertama (a) karena a tidak bernilai null.

Berikut adalah contoh program untuk mengilustrasikan operator ?? agar lebih mudah dipahami:

using System;
namespace CalculatorApplication
{
   class NullablesAtShow
   {
      static void Main(string[] args)
      {
         double? num1 = null;
         double? num2 = 3.14157;
         double num3;
         num3 = num1 ?? 5.34;      
         Console.WriteLine(" Value of num3: {0}", num3);
         num3 = num2 ?? 5.34;
         Console.WriteLine(" Value of num3: {0}", num3);
         Console.ReadLine();
      }
   }
}

Hasil keluaran program setelah dieksekusi adalah sebagai berikut:

Value of num3: 5.34
Value of num3: 3.14157

Ok guys, sampai ketemu di tutorial selanjutnya Arrays.

Sunday 4 September 2016

10. Methods C# (Basic/Dasar)

Hello guys semoga tetap semangat untuk belajar koding, kali ini kita akan membahas tentang methods, lalu apakah method itu sebenarnya? Method adalah kumpulan dari statement yang membentuk sebuah task, mungking dalam bahasa pemrograman lain methods juga disebut sebagai function atau procedure. Setiap program dalam C# terdiri minimal mempunyai  sebuah class dan Main method.

Untuk menggunakan method kita harus:
  • Mendefinisikan Method
  • Memanggil Method tesebut
Mendefinisikan Method dalam C#:

Berikut adalah format untuk membuat sebuah method dalam C#:

<access specifier> <return type> <method name> (Parameter List)
{
   Method Body
}

Berikut adalah penjelasan dari format diatas:

  • Access Specifier: Mengatur akses specifier terhadap class lain, apakah boleh diakse atau tidak, akses specifier telah kita bahas pada bab sebelumnya. Akses specifier bisa berupa public, private, protected, internal atau protected internal.
  • Return Type: Method mungkin akan mengembalikan nilai bisa berupa hasil perhitungan atau object sesuai dengan tipe data yang akan dikembalikan. Jika method tidak mengembalikan nilai apa - apa maka return type bisa disidefinisikan dengan void.
  • Method Name: Nama untuk method harus unique tidak boleh sama dengan identifier yang lain di dalam class. Nama method bersifat case sensitive (huruf besar dan kecil akan dianggap berbeda).
  • Parameter List: Berada diantara tanda kurung (parameter list),  parameter list digunakan untuk memberikan data masukan ke dalam method atau data keluaran dari method. Parameter list bersifat optional bisa ada atau tidak. Mungkin ada juga method yang tidak memerlukan parameter.
  • Method Body: Adalah bagian yang merupakan kumpulan instruksi atau statement dalam method.
Berikut ini adalah contoh pendefinisian method untuk menentukan nilai terbesar dari dua buah nilai. Dua buah nilai itu akan dimasukkan kedalam parameter untuk dibandingkan dan mengembalikan salah satu yang paling besar.

class NumberManipulator
{
   public int FindMax(int num1, int num2)
   {
      /* local variable declaration */
      int result;

      if (num1 > num2)
         result = num1;
      else
         result = num2;

      return result;
   }
   ...
}

Memanggil Method di dalam C#:

Untuk memanggil method di dalam C# kita cukup memanggil namanya saja. Contoh berukut mengilustrasikan pemanggilan method dalam C#.

using System;
namespace CalculatorApplication
{
   class NumberManipulator
   {
      public int FindMax(int num1, int num2)
      {
         /* local variable declaration */
         int result;
         
         if (num1 > num2)
            result = num1;
         else
            result = num2;
         return result;
      }
      static void Main(string[] args)
      {
         /* local variable definition */
         int a = 100;
         int b = 200;
         int ret;
         NumberManipulator n = new NumberManipulator();

         //calling the FindMax method
         ret = n.FindMax(a, b);
         Console.WriteLine("Max value is : {0}", ret );
         Console.ReadLine();
      }
   }
}

Setelah program di eksekusi akan memberikan hasil sebagai berikut:

Max value is : 200

Kita juga dapat memanggil method dari class dengan menggunakan instance dari class. Sebagai contoh method FindMax adalah method dari class NumberManipulator, Kita bisa memanggil nya dari class lain sebagai contoh adalah class Test.

using System;
namespace CalculatorApplication
{
   class NumberManipulator
   {
      public int FindMax(int num1, int num2)
      {
         /* local variable declaration */
         int result;
         
         if(num1 > num2)
            result = num1;
         else
            result = num2;
         
         return result;
      }
   }
   
   class Test
   {
      static void Main(string[] args)
      {
         /* local variable definition */
         int a = 100;
         int b = 200;
         int ret;
         NumberManipulator n = new NumberManipulator();
         
         //calling the FindMax method
         ret = n.FindMax(a, b);
         Console.WriteLine("Max value is : {0}", ret );
         Console.ReadLine();
      }
   }
}

Setelah program dijalankan akan memberikan hasil sebagai berikut:

Max value is : 200

Pemanggilan Method secara Recursive:

Method dapat memanggil dirinya sendiri, hal ini desebut sebagi recursive. Berikut adalah contoh penghitungan factorial dengan menggunakan recursive.

using System;
namespace CalculatorApplication
{
   class NumberManipulator
   {
      public int factorial(int num)
      {
         /* local variable declaration */
         int result;
         if (num == 1)
         {
            return 1;
         }
         else
         {
            result = factorial(num - 1) * num;
            return result;
         }
      }
      
      static void Main(string[] args)
      {
         NumberManipulator n = new NumberManipulator();
         //calling the factorial method
         Console.WriteLine("Factorial of 6 is : {0}", n.factorial(6));
         Console.WriteLine("Factorial of 7 is : {0}", n.factorial(7));
         Console.WriteLine("Factorial of 8 is : {0}", n.factorial(8));
         Console.ReadLine();
      }
   }
}

Hasil keluaran program setelah program selesai dijalankan:

Factorial of 6 is: 720
Factorial of 7 is: 5040
Factorial of 8 is: 40320

Pemanggilan Method dengan Parameter:

Ketika method didefinisikan menggunakan parameter, maka untuk memanggilnya juga harus menggunakan parameter. Ada tiga cara untuk memasukkan data sebagai parameter ke dalam methods:

1. Parameter Nilai:

Paramenter jenis ini adalah default ketika kita mendifinisikan method, maksud dari parameter nilai adalah ketika kita memasukkan sebuah nilai kedalam method dan ada perubahan nilai pada parameter tersebut maka tidak akan berpengaruh pada nilai aslinya atau dengan kata lain nilai akan dicopy terlebih dahulu sebelum digunakan.

Berikut adalah contoh parameter nilai:

using System;
namespace CalculatorApplication
{
   class NumberManipulator
   {
      public void swap(int x, int y)
      {
         int temp;
         
         temp = x; /* save the value of x */
         x = y;    /* put y into x */
         y = temp; /* put temp into y */
      }
      
      static void Main(string[] args)
      {
         NumberManipulator n = new NumberManipulator();
         /* local variable definition */
         int a = 100;
         int b = 200;
         
         Console.WriteLine("Before swap, value of a : {0}", a);
         Console.WriteLine("Before swap, value of b : {0}", b);
         
         /* calling a function to swap the values */
         n.swap(a, b);
         
         Console.WriteLine("After swap, value of a : {0}", a);
         Console.WriteLine("After swap, value of b : {0}", b);
         
         Console.ReadLine();
      }
   }
}

Setelah program selesai dieksekusi maka akan memberikan hasil sebagai berikut, bisa kita lihat manipulasi didalam method tidak berpengaruh pada nilai asli.

Before swap, value of a :100
Before swap, value of b :200
After swap, value of a :100
After swap, value of b :200

2. Parameter Reference:

Parameter jenis ini menuntuk pada lokasi memory dari variabel, sehingga ketika melakukan perubahan pada nilai variable tersebut akan mengubah nilai asli dari variabel tersebut. Untuk mendefinisikan parameter refecence kita bisa menggunakan keyword ref pada saat mendefinisikan method.

Contoh berikut mengilustrasikan parameter reference:

using System;
namespace CalculatorApplication
{
   class NumberManipulator
   {
      public void swap(ref int x, ref int y)
      {
         int temp;

         temp = x; /* save the value of x */
         x = y;    /* put y into x */
         y = temp; /* put temp into y */
      }
   
      static void Main(string[] args)
      {
         NumberManipulator n = new NumberManipulator();
         
         /* local variable definition */
         int a = 100;
         int b = 200;

         Console.WriteLine("Before swap, value of a : {0}", a);
         Console.WriteLine("Before swap, value of b : {0}", b);

         /* calling a function to swap the values */
         n.swap(ref a, ref b);

         Console.WriteLine("After swap, value of a : {0}", a);
         Console.WriteLine("After swap, value of b : {0}", b);
 
         Console.ReadLine();

      }
   }
}

Hasil keluaran program setelah dieksekusi adalah sebagai berikut, terlihat nilai asli variabel ikut berubah ketika nilainya diubah di dalam method:

Before swap, value of a : 100
Before swap, value of b : 200
After swap, value of a : 200
After swap, value of b : 100

3. Parameter Output:

Parameter output digunakan jika kita ingin mengembalikan hasil lebih dari satu nilai. Parameter output hampir sama dengan parameter reference. Perbedaannya adalah method akan mengembalikan nilai dan akan di assign ke variabel dan tidak langsung masuk ke lokasi memory.

Berikut adalah contoh untuk mengilustrasikan parameter output:

using System;
namespace CalculatorApplication
{
   class NumberManipulator
   {
      public void getValue(out int x )
      {
         int temp = 5;
         x = temp;
      }
   
      static void Main(string[] args)
      {
         NumberManipulator n = new NumberManipulator();
         
         /* local variable definition */
         int a = 100;
         
         Console.WriteLine("Before method call, value of a : {0}", a);
         
         /* calling a function to get the value */
         n.getValue(out a);

         Console.WriteLine("After method call, value of a : {0}", a);
         Console.ReadLine();

      }
   }
}

Setelah program dijalankan akan memberikan hasil sebagai berikut:

Before method call, value of a : 100
After method call, value of a : 5

Parameter output sangat bermanfaat ketika kita ingin menginisialisasi variabel yang didefinisikan tanpa nilai, berikut adalah contoh program untuk mengilustrasikannya:

using System;
namespace CalculatorApplication
{
   class NumberManipulator
   {
      public void getValues(out int x, out int y )
      {
          Console.WriteLine("Enter the first value: ");
          x = Convert.ToInt32(Console.ReadLine());
          Console.WriteLine("Enter the second value: ");
          y = Convert.ToInt32(Console.ReadLine());
      }
      static void Main(string[] args)
      {
         NumberManipulator n = new NumberManipulator();
         
         /* local variable definition */
         int a , b;
         
         /* calling a function to get the values */
         n.getValues(out a, out b);
         
         Console.WriteLine("After method call, value of a : {0}", a);
         Console.WriteLine("After method call, value of b : {0}", b);
         Console.ReadLine();
      }
   }
}

Ketika program dijalankan makan akan meminta kita untuk memasukkan nilai a dan b, kemudian nilai input yang kita masukkan akan di assign ke a dan b.

Enter the first value:
7
Enter the second value:
8
After method call, value of a : 7
After method call, value of b : 8

Ok guys sekian dulu tutorial kali ini sampai ketemu ditutorial berikutnya Nullables.

Friday 2 September 2016

9. Encapsulation C# (Basic/Dasar)

Ecapsulation adalah proses untuk mengatur hak akses terhadap implementasi pada sebuah class, jadi kita bisa menentukan mana atribute, fungsi atau member dari class yang bisa diakses oleh class yang lain. Dengan menggunakan akses specifier akan memudahkan programmer yang lain untuk menggunakan class buatan kita.

Encapsulation dalam C# diimplementasikan dengan akses specifier sebagai berikut:
  • Public
  • Private
  • Protected
  • Internal
  • Protected Internal
1. Public

Public access specifier pada variabel dan method akan menyebabkan member variabel dan method tersebut dapat diakses dari luar class oleh class yang lain.

Program berikut ini mengilustrasikan public specifier:

using System;
namespace RectangleApplication
{
   class Rectangle
   {
      //member variables
      public double length;
      public double width;
      
      public double GetArea()
      {
         return length * width;
      }
      public void Display()
      {
         Console.WriteLine("Length: {0}", length);
         Console.WriteLine("Width: {0}", width);
         Console.WriteLine("Area: {0}", GetArea());
      }
   }//end class Rectangle
   
   class ExecuteRectangle
   {
      static void Main(string[] args)
      {
         Rectangle r = new Rectangle();
         r.length = 4.5;
         r.width = 3.5;
         r.Display();
         Console.ReadLine();
      }
   }
}

Hasil output program setelah selesai dieksekusi:

Length: 4.5
Width: 3.5
Area: 15.75

Berdasarkan contoh di atas variabel length dan width dideklarasikan sebagi public member, sehingga bisa diakses dari Main() method class ExecuteRectangle dengan instance object r.

Method GetArea and Display juga dideklarasikan sebagai public sehingga dapat di akses dari object instance r.

2. Private

Private specifier digunakan untuk menyembunyikan member class agar tidak bisa diakses dari class lain. Hanya method dari class yang sama yang dapat mengakses private member, dan private member tidak dapat diakses dari instance classnya sendiri.

Berikut adalah contoh program untuk mensimulasikan private specifier:

using System;
namespace RectangleApplication 
{
   class Rectangle
   {
      //member variables
      private double length;
      private double width;
      
      public void Acceptdetails()
      {
         Console.WriteLine("Enter Length: ");
         length = Convert.ToDouble(Console.ReadLine());
         Console.WriteLine("Enter Width: ");
         width = Convert.ToDouble(Console.ReadLine());
      }
      public double GetArea()
      {
         return length * width;
      }
      public void Display()
      {
         Console.WriteLine("Length: {0}", length);
         Console.WriteLine("Width: {0}", width);
         Console.WriteLine("Area: {0}", GetArea());
      }
   }//end class Rectangle
   
   class ExecuteRectangle
   {
      static void Main(string[] args)
      {
         Rectangle r = new Rectangle();
         r.Acceptdetails();
         r.Display();
         Console.ReadLine();
      }
   }
}

Hasil keluaran program setelah eksekusi adalah sebagai berikut:

Enter Length:
4.4
Enter Width:
3.3
Length: 4.4
Width: 3.3
Area: 14.52

Dari contoh program diatas member length dan width dideklarasikan sebagai private member, sehingga tidak dapat diakses dari class yang lain, jika ada akses ke private member akan mengeluarkan error saat proses kompilasi program.

3. Protected

Protected specifier mengijinkan class turunan untuk mengakses member variabel dan method yang di definisikan sebagai protected. Protected dan Public akses dapat diakses dari class turunan tetapi tidak dengan private class.

Protected specifier tidak bisa diakses oleh class yang lain yang tidak menurunkannya, atau dengan kata lain hanya bisa diakses dari class turunannya.

Untuk pembahasan mengenai class turunan akan dibahas pada bab tersendiri diluar bab ini.

4. Internal

Internal specifier pada dasarnya sama dengan public specifier tetapi pada application assembly. Dengan kata lain, semua member dengan internal specifier dapat diakses dari class atau method dari manapun dalam file yang sama. Jadi misalkan kita punya class atau member yang dideclarasikan sebagai internal dengan nama file Member.cs kemudian kita punya class yang berada di flle lain dengan nama ReadMember.cs kemudian dari ReadMember.cs kita mencoba untuk mengakses member dengan internal specifier di Member.cs tidak akan bisa.

Berikut adalah contoh program untuk internal specifier:

using System;
namespace RectangleApplication
{
   class Rectangle
   {
      //member variables
      internal double length;
      internal double width;
      
      double GetArea()
      {
         return length * width;
      }
      public void Display()
      {
         Console.WriteLine("Length: {0}", length);
         Console.WriteLine("Width: {0}", width);
         Console.WriteLine("Area: {0}", GetArea());
      }
   }//end class Rectangle
   
   class ExecuteRectangle
   {
      static void Main(string[] args)
      {
         Rectangle r = new Rectangle();
         r.length = 4.5;
         r.width = 3.5;
         r.Display();
         Console.ReadLine();
      }
   }
}

Hasil dari keluaran program setelah dijalankan adalah sebagai berikut:

Length: 4.5
Width: 3.5
Area: 15.75

Pada contoh program di atas method GetArea() dideklarasikan tanpa akses specifer, maka secara default akan sebagai private member.

5. Protected Internal

Pada dasarnya sama dengan internal akses specifier tetapi hanya class turunan-nya saja yang dapat mengakses membernya.

Ok guys semoga bermanfaat sampai ketemu di tutorial berikutnya Methods.

Thursday 1 September 2016

8. Loop/Pengulangan C# (Basic/Dasar)

Ada kalanya kita ingin melakukan pemanggilan sebuah kode secara berulang - ulang. Misalnya kita ingin mencari bilangan prima dalam rentang 0 - 100 maka kita akan melakukan pengecekan satu persatu angka dalam rentang 0 - 100, tiap kali pengecekan akan diulang terus menerus sampai angka terakhir yaitu 100. Oleh karena itu diperlukan adanya blok pengulangan dalam bahasa pemrograman untuk memudahkan operasi pengulangan.

Arsitektur pengulagan dapat diilustrasikan dengan gambar dibawah ini:


Dalam C# mengenal beberapa syntax blok pengulangan sebagai berikut:

1. While Loop



While loop akan melakukan pengulangan terus menerus jika kondisi yang diberikan bernilai benar. Kondisi akan di cek terlebih dahulu sebelum melakukan eksekusi blok kode.

Berikut adalah contoh program untuk while loop:

using System;
namespace Loops 
{
   class Program
   {
      static void Main(string[] args)
      {
         /* local variable definition */
         int a = 10;

         /* while loop execution */
         while (a < 20)
         {
            Console.WriteLine("value of a: {0}", a);
            a++;
         }
         Console.ReadLine();
      }
   }
} 

Hasil setelah program dijalankan dalah sebagai berikut:

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15
value of a: 16
value of a: 17
value of a: 18
value of a: 19

2. For Loop



For loop akan melakukan pengulangan dengan mengeksekusi urutan ekspresi, sampai kondisi valid.

for ( init; condition; increment )
{
   statement(s);
}

init : Adalah bagian inisialisasi, dan hanya akan dieksekusi sekali. init tidak wajib diisi selama ada semicolon (;) untuk penanda bahwa init bernilai kosong.

condition: Adalah bagian yang akan di cek kondisinya, jika kondisi masih bernilai benar maka akan dilakukan pengulangan sampai kondisi bernilai salah dan lanjut ke kode setelah blok loop. Bagian ini sering desebut dengan body of loop.

increment: Increment akan dieksekusi setelah body of loop dieksekusi, kita dapat memanipulasi variabel dalam statement increment untuk mengupdate dan mengkontrol loop. Bagian ini tidak wajib diisi selama ada semocolon (;) untuk menandai bahwa blok increment kosong;

Berikut adalah contoh program untuk for loop:

using System;
namespace Loops
{
   class Program
   {
      static void Main(string[] args)
      {
         /* for loop execution */
         for (int a = 10; a < 20; a = a + 1)
         {
            Console.WriteLine("value of a: {0}", a);
         }
         Console.ReadLine();
      }
   }
} 

Setelah progam dijalankan akan memberikan output sebagai berikut:

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15
value of a: 16
value of a: 17
value of a: 18
value of a: 19

3. Do While Loop



Pada dasarnya sama dengan while loop, yang membedakan adalah letak pengecekan kondisi pada do while loop ada di akhir block setelah body. Sehingga pada do while loop dapat dipastikan blok body akan dieksekusi minimal satu kali sebelum dilakukan pengecekan kondisi.

Berikut adalah contoh program untuk blok do while loop:

using System;
namespace Loops
{
   class Program
   {
      static void Main(string[] args)
      {
         /* local variable definition */
         int a = 10;
         
         /* do loop execution */
         do
         {
            Console.WriteLine("value of a: {0}", a);
            a = a + 1;
         } 
         while (a < 20);
         Console.ReadLine();
      }
   }
} 

Setelah program selesai dijalankan akan mengeluarkan hasil:

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15
value of a: 16
value of a: 17
value of a: 18
value of a: 19

4. Loop di dalam Loop (Nested Loop/Loop Bersarang)

Kita juga bisa membuat pengulangan dalam pengulangan dan bisanya digunakan untuk pengecekan array multidimensi atau matrix. Pengulangan bersarang bisa dikombinasikan antara for, while dan do while.

Berikut adalah contoh program untuk pengulangan bersarang mencari bilangan prima diantara 2 - 100:

using System;
namespace Loops
{
   class Program
   {
      static void Main(string[] args)
      {
         /* local variable definition */
         int i, j;
         for (i = 2; i < 100; i++)
         {
            for (j = 2; j <= (i / j); j++)
            if ((i % j) == 0) break; // if factor found, not prime
            if (j > (i / j))
            Console.WriteLine("{0} is prime", i);
         }
         Console.ReadLine();
      }
   }
} 

Hasil keluaran program adalah sebagai berikut:

2 is prime
3 is prime
5 is prime
7 is prime
11 is prime
13 is prime
17 is prime
19 is prime
23 is prime
29 is prime
31 is prime
37 is prime
41 is prime
43 is prime
47 is prime
53 is prime
59 is prime
61 is prime
67 is prime
71 is prime
73 is prime
79 is prime
83 is prime
89 is prime
97 is prime

Mengontrol Pengulangan dengan Break dan Continue

Ada kalanya kita menginginkan untuk melakukan kontrol pada saat melakukan pengulangan, misalnya saja kita ingin mencari sebuah kata dari kumpulan kata dengan pengulangan dan ketika kata itu ditemukan kita langsung keluar dari proses pengulangan untuk menghemat memory dan kinerja CPU.

Mengontrol dengan Break statement:

Break statement digunakan untuk menghentikan loop dan keluar dari body blok loop. Break statement selain dalam loop juga dapat ditemui di switch statement.

Berikut adalah contoh program untuk mensimulasikan break statement:

using System;
namespace Loops 
{
   class Program
   {
      static void Main(string[] args)
      {
         /* local variable definition */
         int a = 10;
         
         /* while loop execution */
         while (a < 20)
         {
            Console.WriteLine("value of a: {0}", a);
            a++;
            if (a > 15)
            {
               /* terminate the loop using break statement */
               break;
            }
         }
         Console.ReadLine();
      }
   }
} 

Hasil keluaran program adalah sebagai berikut:

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 15

Mengontrol dengan Continue Statement:


Continue statement digunakan untuk melakukan skip kode pada body of loop dan langsung kembali mengeksekusi loop berikutnya.

Berikut adalah contoh program untuk mensimulasikan continue statement:

using System;
namespace Loops
{
   class Program
   {
      static void Main(string[] args)
      {
         /* local variable definition */
         int a = 10;
         
         /* do loop execution */
         do
         {
            if (a == 15)
            {
               /* skip the iteration */
               a = a + 1;
               continue;
            }
            Console.WriteLine("value of a: {0}", a);
            a++;
         } 
         while (a < 20);
         Console.ReadLine();
      }
   }
} 

Keluaran program setelah eksekusi adalah sebagai berikut:

value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 16
value of a: 17
value of a: 18
value of a: 19

Ok guys sampai ketemu di tutorial selanjutnya Encapsulation/Implementasi Hak Akses.