0
0
Lập trình
Hưng Nguyễn Xuân 1
Hưng Nguyễn Xuân 1xuanhungptithcm

So sánh giữa Python và Ruby: Những đặc điểm chỉ có trong Python

Đăng vào 1 tháng trước

• 5 phút đọc

Chủ đề:

PythonRuby

So sánh giữa Python và Ruby: Những đặc điểm chỉ có trong Python

Trong thế giới lập trình, Python và Ruby đều là những ngôn ngữ mạnh mẽ, mỗi ngôn ngữ có những đặc điểm và ưu điểm riêng. Tuy nhiên, có một số thành phần và tính năng mà Python sở hữu nhưng Ruby lại không có hoặc không phổ biến bằng. Dưới đây là một số điểm nổi bật:

1. Kiểu dữ liệu tuple

  • Python: Có kiểu dữ liệu tuple, cho phép lưu trữ một tập hợp bất biến.

    Ví dụ:

    Copy
    my_tuple = (1, 2, 3)
    # my_tuple[0] = 10  # Lỗi: Tuple là bất biến
  • Ruby: Không có kiểu dữ liệu tương đương. Để đảm bảo tính bất biến, bạn cần sử dụng freeze trên mảng:

    Copy
    arr = [1, 2, 3].freeze
    # arr[0] = 10  # Lỗi: Không thể thay đổi mảng đã đóng băng

2. Dictionary Comprehension

  • Python: Hỗ trợ cú pháp comprehension để tạo dictionary.

    Ví dụ:

    Copy
    squared = {x: x**2 for x in range(5)}
    print(squared)  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
  • Ruby: Sử dụng các phương thức như each_with_object hoặc map để đạt được điều này:

    Copy
    squared = (0..4).map { |x| [x, x**2] }.to_h
    puts squared  # {0=>0, 1=>1, 2=>4, 3=>9, 4=>16}

3. Decorator (Hàm trang trí)

  • Python: Hỗ trợ decorators, cho phép bạn thay đổi hành vi của hàm hoặc lớp dễ dàng.

    Ví dụ:

    Copy
    def decorator(func):
        def wrapper():
            print("Trước khi gọi hàm")
            func()
            print("Sau khi gọi hàm")
        return wrapper
    
    @decorator
    def say_hello():
        print("Xin chào!")
    
    say_hello()
  • Ruby: Không có decorators tích hợp sẵn và bạn cần phải viết logic thủ công hoặc áp dụng metaprogramming.

4. Kiểu dữ liệu set

  • Python: Có kiểu dữ liệu set cho phép thực hiện các phép toán tập hợp.

    Ví dụ:

    Copy
    set1 = {1, 2, 3}
    set2 = {3, 4, 5}
    print(set1 & set2)  # {3}
  • Ruby: Cần sử dụng thư viện Set để có tính năng tương tự:

    Copy
    require 'set'
    set1 = Set.new([1, 2, 3])
    set2 = Set.new([3, 4, 5])
    puts set1 & set2  # #<Set: {3}>

5. Type Hints (Gợi ý kiểu dữ liệu)

  • Python: Hỗ trợ type hints, giúp chỉ định kiểu dữ liệu cho tham số và giá trị trả về.

    Ví dụ:

    Copy
    def add_numbers(a: int, b: int) -> int:
        return a + b
  • Ruby: Không hỗ trợ type hints tích hợp, cần sử dụng các gem như sorbet hoặc rbs.

6. List Comprehension

  • Python: Cú pháp ngắn gọn để tạo danh sách từ vòng lặp hoặc điều kiện.

    Ví dụ:

    Copy
    squared = [x**2 for x in range(5)]
    print(squared)  # [0, 1, 4, 9, 16]
  • Ruby: Sử dụng phương thức map để đạt được kết quả tương tự:

    Copy
    squared = (0..4).map { |x| x**2 }
    puts squared  # [0, 1, 4, 9, 16]

7. Hàm ẩn danh đa dòng (lambda)

  • Python: Hỗ trợ hàm ẩn danh (lambda) nhưng chỉ cho phép biểu thức đơn dòng.

    Ví dụ:

    Copy
    add = lambda x, y: x + y
    print(add(2, 3))  # 5
  • Ruby: Hỗ trợ lambda nhưng có cú pháp phức tạp hơn:

    Copy
    add = ->(x, y) { x + y }
    puts add.call(2, 3)  # 5

8. Tích hợp với NumPy và Pandas

  • Python: Có các thư viện như NumPy và Pandas rất mạnh mẽ cho khoa học dữ liệu.
  • Ruby: Thiếu các thư viện tương đương mạnh mẽ, có thể sử dụng NMatrix hoặc Daru nhưng không phổ biến như Python.

9. Gán nhiều giá trị cùng lúc

  • Python: Hỗ trợ gán nhiều giá trị cho nhiều biến trên một dòng.

    Ví dụ:

    Copy
    a, b, c = 1, 2, 3
    print(a, b, c)  # 1 2 3
  • Ruby: Cũng hỗ trợ tính năng tương tự nhưng ít được sử dụng hơn.

    Copy
    a, b, c = 1, 2, 3
    puts "#{a}, #{b}, #{c}"  # 1, 2, 3

10. Đa luồng thực sự (True Multithreading)

  • Python: Hỗ trợ đa luồng nhưng do GIL, các luồng không thực sự chạy song song trong nhiều trường hợp.
  • Ruby: Ruby MRI cũng có GIL, nhưng Python có nhiều lựa chọn phương án tối ưu hóa khác nhau hơn.

11. Hỗ trợ tích hợp cho Machine Learning và AI

  • Python: Nổi bật với các thư viện AI/ML như TensorFlow, PyTorch và Scikit-learn.
  • Ruby: Rất ít thư viện AI/ML mạnh mẽ, hầu hết dự án AI/ML đều sử dụng Python.

12. Hỗ trợ async/await

  • Python: Hỗ trợ lập trình bất đồng bộ với asyncawait giúp xử lý đồng thời dễ dàng hơn.

    Ví dụ:

    Copy
    import asyncio
    
    async def say_hello():
        print("Xin chào!")
        await asyncio.sleep(1)
        print("Tạm biệt!")
    
    asyncio.run(say_hello())
  • Ruby: Không hỗ trợ async/await tích hợp, cần sử dụng gem như async.


Hy vọng bài viết này giúp bạn hiểu rõ hơn về những điểm khác biệt giữa Python và Ruby. Mỗi ngôn ngữ đều có những ưu điểm riêng, tùy thuộc vào nhu cầu và lĩnh vực bạn làm việc.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào