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.