So sánh Ruby và Python thông qua các ví dụ

0 0 0

Người đăng: Hoang Minh Dai

Theo Viblo Asia

Python có cú pháp đơn giản và dễ đọc, khác với Ruby ở một số điểm chính. Dưới đây là một số so sánh giữa Python và Ruby để bạn dễ làm quen:


1. Cách khai báo biến

Ruby:

name = "Ruby"
age = 25

Python:

name = "Python"
age = 25

Python không cần từ khóa để khai báo biến, chỉ cần gán giá trị.


2. Hàm

Ruby:

def greet(name) "Hello, #{name}!"
end puts greet("Ruby")

Python:

def greet(name): return f"Hello, {name}!" print(greet("Python"))
  • Python dùng def và kết thúc khối bằng dấu thụt lề (indentation), không có end.

3. Câu điều kiện

Ruby:

if age > 18 puts "Adult"
else puts "Minor"
end

Python:

if age > 18: print("Adult")
else: print("Minor")
  • Python sử dụng dấu : để bắt đầu khối lệnh và thụt lề để xác định khối.

4. Vòng lặp

Ruby:

(1..5).each do |i| puts i
end

Python:

for i in range(1, 6): print(i)
  • Python sử dụng range để tạo dãy số, và không cần khối do ... end.

5. Mảng và Hash

Ruby:

arr = [1, 2, 3]
hash = {name: "Ruby", age: 25}

Python:

arr = [1, 2, 3]
hash = {"name": "Python", "age": 25}
  • Hash trong Python là dict và sử dụng dấu ngoặc {} cùng dấu : để gán key-value.

6. Block

Ruby:

[1, 2, 3].map { |x| x * 2 }

Python:

list(map(lambda x: x * 2, [1, 2, 3]))
  • Python không có block như Ruby, thay vào đó dùng hàm lambda hoặc def.

7. Class

Ruby:

class Person attr_accessor :name def initialize(name) @name = name end
end person = Person.new("Ruby")
puts person.name

Python:

class Person: def __init__(self, name): self.name = name person = Person("Python")
print(person.name)
  • Python sử dụng từ khóa class và hàm khởi tạo là __init__.

Dưới đây là một số so sánh bổ sung giữa cú pháp Python và Ruby ở các khía cạnh khác nhau:


8. Xử lý ngoại lệ

Ruby:

begin result = 10 / 0
rescue ZeroDivisionError => e puts "Error: #{e.message}"
end

Python:

try: result = 10 / 0
except ZeroDivisionError as e: print(f"Error: {e}")
  • Python dùng try-except, không cần từ khóa begin hay end.

9. Kiểm tra giá trị nil hoặc None

Ruby:

value = nil
puts "Value is nil" if value.nil?

Python:

value = None
if value is None: print("Value is None")
  • Ruby dùng nil và phương thức .nil?, trong khi Python dùng None và so sánh với is.

10. Toán tử 3 ngôi

Ruby:

result = age > 18 ? "Adult" : "Minor"

Python:

result = "Adult" if age > 18 else "Minor"
  • Python đảo ngược vị trí của điều kiện và kết quả so với Ruby.

11. Chuyển đổi kiểu dữ liệu

Ruby:

num = "42".to_i
str = 42.to_s

Python:

num = int("42")
str = str(42)
  • Python sử dụng các hàm chuyển đổi như int(), str() thay vì phương thức đối tượng.

12. Kiểm tra phần tử trong danh sách

Ruby:

arr = [1, 2, 3]
puts "Found" if arr.include?(2)

Python:

arr = [1, 2, 3]
if 2 in arr: print("Found")
  • Python dùng từ khóa in, Ruby dùng .include?.

13. Đọc và ghi file

Ruby:

File.open("example.txt", "w") { |file| file.puts "Hello, Ruby!" }
content = File.read("example.txt")
puts content

Python:

with open("example.txt", "w") as file: file.write("Hello, Python!") with open("example.txt", "r") as file: content = file.read() print(content)
  • Python dùng cú pháp with open() để tự động đóng file sau khi xử lý.

14. Hàm ẩn danh

Ruby:

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

Python:

add = lambda x, y: x + y
print(add(2, 3))
  • Python dùng lambda thay cho toán tử -> trong Ruby.

15. Vòng lặp vô hạn

Ruby:

loop do puts "Infinite loop" break
end

Python:

while True: print("Infinite loop") break
  • Python dùng while True để tạo vòng lặp vô hạn.

16. Gọi phương thức

Ruby:

"hello".upcase

Python:

"hello".upper()
  • Python yêu cầu dấu () khi gọi phương thức, trong khi Ruby có thể bỏ qua nếu không có tham số.

17. Cấu trúc dữ liệu tập hợp (Set)

Ruby:

require 'set' set = Set.new([1, 2, 3])
set.add(4)
puts set.include?(2)

Python:

set_data = {1, 2, 3}
set_data.add(4)
print(2 in set_data)
  • Python hỗ trợ set như một kiểu dữ liệu tích hợp sẵn, trong khi Ruby cần thư viện Set.

Dưới đây là thêm các so sánh khác giữa Python và Ruby để bạn hiểu rõ hơn về sự khác biệt:


18. Từ khóa self

Ruby:

class Person attr_accessor :name def initialize(name) @name = name end def greet "Hello, my name is #{self.name}" end
end

Python:

class Person: def __init__(self, name): self.name = name def greet(self): return f"Hello, my name is {self.name}"
  • Python yêu cầu self trong mọi phương thức của lớp, trong khi Ruby chỉ cần khi truy cập thuộc tính hoặc gọi phương thức trong cùng lớp.

19. Kế thừa

Ruby:

class Animal def speak "I'm an animal" end
end class Dog < Animal
end dog = Dog.new
puts dog.speak

Python:

class Animal: def speak(self): return "I'm an animal" class Dog(Animal): pass dog = Dog()
print(dog.speak())
  • Ruby dùng < để chỉ định kế thừa, trong khi Python dùng cú pháp class SubClass(SuperClass).

20. Module/Namespace

Ruby:

module Greetings def self.say_hello "Hello from Ruby!" end
end puts Greetings.say_hello

Python:

class Greetings: @staticmethod def say_hello(): return "Hello from Python!" print(Greetings.say_hello())
  • Python không có module như Ruby, thường sử dụng class hoặc import file/module khác.

21. Sử dụng yield

Ruby:

def custom_each(arr) arr.each { |item| yield(item) }
end custom_each([1, 2, 3]) { |x| puts x * 2 }

Python:

def custom_each(arr): for item in arr: yield item for x in custom_each([1, 2, 3]): print(x * 2)
  • Ruby sử dụng yield để gọi block, còn Python sử dụng yield trong generator để trả về giá trị từng phần.

22. Truy cập phần tử

Ruby:

arr = [1, 2, 3]
puts arr[0] # 1
puts arr[-1] # 3

Python:

arr = [1, 2, 3]
print(arr[0]) # 1
print(arr[-1]) # 3
  • Cú pháp gần giống nhau, nhưng Python có thể xử lý slicing mạnh mẽ hơn:
print(arr[1:]) # [2, 3]

23. Kiểm tra kiểu dữ liệu

Ruby:

puts 42.is_a?(Integer) # true

Python:

print(isinstance(42, int)) # True
  • Python dùng hàm isinstance() thay vì phương thức .is_a?.

24. Hàm toàn cục

Ruby:

puts "Hello, Ruby!"

Python:

print("Hello, Python!")
  • Python sử dụng hàm print() như một hàm toàn cục, Ruby dùng puts.

25. Toán tử logic

Ruby:

puts true && false # false
puts true || false # true

Python:

print(True and False) # False
print(True or False) # True
  • Python dùng từ khóa and, or, not thay vì &&, ||, ! như Ruby.

26. Mảng lồng nhau

Ruby:

matrix = [[1, 2], [3, 4]]
puts matrix[1][0] # 3

Python:

matrix = [[1, 2], [3, 4]]
print(matrix[1][0]) # 3
  • Cú pháp truy cập tương tự, nhưng Python hỗ trợ thư viện như numpy để xử lý ma trận phức tạp hơn.

27. Gọi hàm không cần tham số

Ruby:

def greet "Hello!"
end puts greet

Python:

def greet(): return "Hello!" print(greet())
  • Python luôn yêu cầu dấu () khi định nghĩa và gọi hàm, kể cả không có tham số.

28. Từ khóa unless

Ruby:

puts "Not an adult" unless age > 18

Python:

if not age > 18: print("Not an adult")
  • Python không có từ khóa unless, phải dùng if not.

Dưới đây là thêm các so sánh giữa Python và Ruby:


29. Kiểm tra độ dài của chuỗi hoặc mảng

Ruby:

str = "Ruby"
arr = [1, 2, 3] puts str.length # 4
puts arr.size # 3

Python:

str = "Python"
arr = [1, 2, 3] print(len(str)) # 6
print(len(arr)) # 3
  • Python sử dụng hàm toàn cục len() để kiểm tra độ dài, trong khi Ruby sử dụng phương thức .length hoặc .size.

30. Câu lệnh case hoặc switch

Ruby:

case language
when "Ruby" puts "Hello, Ruby!"
when "Python" puts "Hello, Python!"
else puts "Unknown language"
end

Python:

language = "Python" match language: case "Ruby": print("Hello, Ruby!") case "Python": print("Hello, Python!") case _: print("Unknown language")
  • Python (từ phiên bản 3.10) hỗ trợ match-case, tương tự case-when trong Ruby.

31. Biểu thức chính quy

Ruby:

if "hello" =~ /ell/ puts "Match found"
end

Python:

import re if re.search("ell", "hello"): print("Match found")
  • Python sử dụng thư viện re để làm việc với regex, trong khi Ruby hỗ trợ regex tích hợp sẵn.

32. Tạo danh sách mới từ danh sách cũ (List Comprehension)

Ruby:

arr = [1, 2, 3]
new_arr = arr.map { |x| x * 2 }
puts new_arr # [2, 4, 6]

Python:

arr = [1, 2, 3]
new_arr = [x * 2 for x in arr]
print(new_arr) # [2, 4, 6]
  • Python có cú pháp list comprehension gọn hơn so với map trong Ruby.

33. Tạo giá trị mặc định cho Hash hoặc Dict

Ruby:

hash = Hash.new(0)
hash[:key] += 1
puts hash[:key] # 1

Python:

from collections import defaultdict hash = defaultdict(int)
hash["key"] += 1
print(hash["key"]) # 1
  • Python sử dụng defaultdict từ thư viện collections để thiết lập giá trị mặc định.

34. Vòng lặp với chỉ số

Ruby:

arr = ["a", "b", "c"]
arr.each_with_index do |val, index| puts "#{index}: #{val}"
end

Python:

arr = ["a", "b", "c"]
for index, val in enumerate(arr): print(f"{index}: {val}")
  • Python sử dụng enumerate() để lặp qua danh sách với chỉ số.

35. Cấu trúc Singleton

Ruby:

class Singleton @@instance = nil def self.instance @@instance ||= new end private_class_method :new
end obj = Singleton.instance

Python:

class Singleton: _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super().__new__(cls) return cls._instance obj = Singleton()
  • Python sử dụng __new__() để đảm bảo chỉ có một instance của lớp được tạo.

36. Cấu trúc while với giá trị

Ruby:

while line = gets puts line
end

Python:

while True: line = input() if not line: break print(line)
  • Python yêu cầu kiểm tra điều kiện dừng trong vòng lặp, Ruby có thể gán giá trị trực tiếp trong while.

37. Câu lệnh break, nextredo

Ruby:

(1..5).each do |i| next if i == 3 break if i == 4 puts i
end

Python:

for i in range(1, 6): if i == 3: continue if i == 4: break print(i)
  • Python có breakcontinue, nhưng không có redo như Ruby.

38. Gọi phương thức động (Dynamic Method Call)

Ruby:

method_name = :upcase
puts "hello".send(method_name) # "HELLO"

Python:

method_name = "upper"
print(getattr("hello", method_name)()) # "HELLO"
  • Python sử dụng getattr() để gọi phương thức động.

39. Thao tác với chuỗi

Ruby:

str = "hello"
puts str.capitalize # "Hello"
puts str.reverse # "olleh"

Python:

str = "hello"
print(str.capitalize()) # "Hello"
print(str[::-1]) # "olleh"
  • Python sử dụng slicing [::-1] để đảo ngược chuỗi.

40. Giá trị mặc định cho tham số

Ruby:

def greet(name = "Guest") "Hello, #{name}!"
end puts greet # "Hello, Guest!"
puts greet("Ruby") # "Hello, Ruby!"

Python:

def greet(name="Guest"): return f"Hello, {name}!" print(greet()) # "Hello, Guest!"
print(greet("Python")) # "Hello, Python!"
  • Python và Ruby đều hỗ trợ giá trị mặc định cho tham số, nhưng cú pháp khác nhau.

Dưới đây là thêm nhiều so sánh chi tiết hơn giữa Python và Ruby:


41. Phương thức tap trong Ruby và tương tự trong Python

Ruby:

value = "hello".tap { |str| puts "Original: #{str}" }.upcase
puts value # "HELLO"

Python:

value = (lambda x: print(f"Original: {x}") or x)("hello").upper()
print(value) # "HELLO"
  • Python không có phương thức tap, nhưng có thể sử dụng lambda hoặc custom utility để mô phỏng.

42. Tạo chuỗi lặp lại

Ruby:

puts "abc" * 3 # "abcabcabc"

Python:

print("abc" * 3) # "abcabcabc"
  • Cú pháp giống nhau, cả hai đều hỗ trợ toán tử * cho chuỗi.

43. Kiểm tra số chẵn/lẻ

Ruby:

puts 4.even? # true
puts 5.odd? # true

Python:

print(4 % 2 == 0) # True
print(5 % 2 != 0) # True
  • Ruby có phương thức tích hợp .even?.odd?, trong khi Python cần kiểm tra bằng phép chia lấy dư.

44. Đảo ngược danh sách hoặc mảng

Ruby:

arr = [1, 2, 3]
puts arr.reverse # [3, 2, 1]

Python:

arr = [1, 2, 3]
print(arr[::-1]) # [3, 2, 1]
  • Python sử dụng slicing [::-1], Ruby có .reverse.

45. Từ khóa for

Ruby:

for i in 1..3 puts i
end

Python:

for i in range(1, 4): print(i)
  • Ruby sử dụng 1..3 để tạo một range, Python sử dụng range().

46. Tạo một chuỗi từ danh sách

Ruby:

arr = ["a", "b", "c"]
puts arr.join(", ") # "a, b, c"

Python:

arr = ["a", "b", "c"]
print(", ".join(arr)) # "a, b, c"
  • Ruby sử dụng .join trên mảng, Python sử dụng .join trên chuỗi.

47. Khởi tạo giá trị mặc định trong hàm

Ruby:

def greet(name = "Guest") "Hello, #{name}!"
end puts greet # "Hello, Guest!"
puts greet("Ruby") # "Hello, Ruby!"

Python:

def greet(name="Guest"): return f"Hello, {name}!" print(greet()) # "Hello, Guest!"
print(greet("Python")) # "Hello, Python!"
  • Cả hai đều hỗ trợ giá trị mặc định cho tham số.

48. Kiểm tra key trong Hash/Dict

Ruby:

hash = { name: "Ruby", age: 25 }
puts hash.key?(:name) # true

Python:

dict_data = { "name": "Python", "age": 25 }
print("name" in dict_data) # True
  • Ruby sử dụng .key?, Python sử dụng in.

49. Truy cập giá trị mặc định trong Hash/Dict

Ruby:

hash = Hash.new("default")
puts hash[:key] # "default"

Python:

dict_data = {}
print(dict_data.get("key", "default")) # "default"
  • Python sử dụng .get(key, default), Ruby thiết lập giá trị mặc định khi khởi tạo.

50. Lambda đa dòng

Ruby:

my_lambda = ->(x) do x * 2
end puts my_lambda.call(3) # 6

Python:

def my_lambda(x): return x * 2 print(my_lambda(3)) # 6
  • Python sử dụng hàm thông thường để thay thế lambda đa dòng.

51. Phương thức zip

Ruby:

arr1 = [1, 2, 3]
arr2 = ["a", "b", "c"]
zipped = arr1.zip(arr2)
puts zipped.inspect # [[1, "a"], [2, "b"], [3, "c"]]

Python:

arr1 = [1, 2, 3]
arr2 = ["a", "b", "c"]
zipped = zip(arr1, arr2)
print(list(zipped)) # [(1, "a"), (2, "b"), (3, "c")]
  • Cả hai đều hỗ trợ phương thức zip, nhưng kết quả ở dạng mảng trong Ruby và iterator trong Python.

52. Thao tác với range

Ruby:

(1..5).each { |i| puts i } # 1 2 3 4 5

Python:

for i in range(1, 6): print(i) # 1 2 3 4 5
  • Python cần sử dụng range(start, stop).

53. Toán tử spaceship <=>

Ruby:

puts 5 <=> 10 # -1
puts 10 <=> 5 # 1
puts 5 <=> 5 # 0

Python:

def spaceship(a, b): return (a > b) - (a < b) print(spaceship(5, 10)) # -1
print(spaceship(10, 5)) # 1
print(spaceship(5, 5)) # 0
  • Python không có toán tử <=>, nhưng có thể tự định nghĩa.

54. Tính tổng các phần tử trong mảng

Ruby:

arr = [1, 2, 3]
puts arr.sum # 6

Python:

arr = [1, 2, 3]
print(sum(arr)) # 6
  • Python sử dụng hàm tích hợp sum().

55. Xóa các giá trị nil/None

Ruby:

arr = [1, nil, 2, nil, 3]
puts arr.compact # [1, 2, 3]

Python:

arr = [1, None, 2, None, 3]
print([x for x in arr if x is not None]) # [1, 2, 3]
  • Ruby có phương thức .compact, Python dùng list comprehension.

56. Biến toàn cục

Ruby:

$global_var = "I am global"
def show_global puts $global_var
end show_global # "I am global"

Python:

global_var = "I am global"
def show_global(): global global_var print(global_var) show_global() # "I am global"
  • Ruby sử dụng ký hiệu $ để khai báo biến toàn cục, Python sử dụng từ khóa global bên trong hàm.

57. Xử lý lỗi với rescue hoặc try-except

Ruby:

begin 1 / 0
rescue ZeroDivisionError puts "Cannot divide by zero"
end

Python:

try: 1 / 0
except ZeroDivisionError: print("Cannot divide by zero")
  • Ruby sử dụng rescue, Python sử dụng try-except.

58. Tạo đối tượng Struct

Ruby:

Person = Struct.new(:name, :age)
person = Person.new("Alice", 30)
puts person.name # "Alice"
puts person.age # 30

Python:

from collections import namedtuple Person = namedtuple("Person", ["name", "age"])
person = Person(name="Alice", age=30)
print(person.name) # "Alice"
print(person.age) # 30
  • Python sử dụng namedtuple từ thư viện collections.

59. Định nghĩa module và import

Ruby:

module Greeting def self.say_hello "Hello!" end
end puts Greeting.say_hello # "Hello!"

Python:

# greeting.py
def say_hello(): return "Hello!" # main.py
import greeting
print(greeting.say_hello()) # "Hello!"
  • Ruby sử dụng module, Python sử dụng tệp .py và từ khóa import.

60. Kiểm tra kiểu dữ liệu

Ruby:

puts 123.is_a?(Integer) # true
puts "hello".is_a?(String) # true

Python:

print(isinstance(123, int)) # True
print(isinstance("hello", str)) # True
  • Ruby sử dụng .is_a?, Python sử dụng isinstance().

61. Phương thức to_sstr()

Ruby:

num = 123
puts num.to_s # "123"

Python:

num = 123
print(str(num)) # "123"
  • Ruby sử dụng .to_s, Python sử dụng str().

62. Lấy giá trị nhỏ nhất/lớn nhất trong mảng

Ruby:

arr = [3, 1, 4, 1, 5]
puts arr.min # 1
puts arr.max # 5

Python:

arr = [3, 1, 4, 1, 5]
print(min(arr)) # 1
print(max(arr)) # 5
  • Python sử dụng hàm toàn cục min()max(), Ruby có phương thức .min.max.

63. Xóa phần tử khỏi mảng

Ruby:

arr = [1, 2, 3, 4]
arr.delete(3)
puts arr # [1, 2, 4]

Python:

arr = [1, 2, 3, 4]
arr.remove(3)
print(arr) # [1, 2, 4]
  • Ruby sử dụng .delete, Python sử dụng .remove.

64. Tìm index của phần tử

Ruby:

arr = [1, 2, 3, 4]
puts arr.index(3) # 2

Python:

arr = [1, 2, 3, 4]
print(arr.index(3)) # 2
  • Cả hai đều sử dụng .index.

65. Biểu thức điều kiện if-else một dòng

Ruby:

puts "Even" if 4.even?

Python:

print("Even") if 4 % 2 == 0 else None
  • Ruby sử dụng cú pháp if, Python sử dụng if-else một dòng.

66. Sắp xếp mảng

Ruby:

arr = [3, 1, 4, 1, 5]
puts arr.sort # [1, 1, 3, 4, 5]

Python:

arr = [3, 1, 4, 1, 5]
print(sorted(arr)) # [1, 1, 3, 4, 5]
  • Ruby sử dụng .sort, Python sử dụng sorted().

67. Sử dụng each hoặc for để lặp

Ruby:

arr = [1, 2, 3]
arr.each { |x| puts x }

Python:

arr = [1, 2, 3]
for x in arr: print(x)
  • Ruby sử dụng .each, Python sử dụng for.

68. Tạo Hash/Dict từ hai danh sách

Ruby:

keys = [:a, :b, :c]
values = [1, 2, 3]
hash = Hash[keys.zip(values)]
puts hash # {:a=>1, :b=>2, :c=>3}

Python:

keys = ["a", "b", "c"]
values = [1, 2, 3]
dict_data = dict(zip(keys, values))
print(dict_data) # {'a': 1, 'b': 2, 'c': 3}
  • Ruby sử dụng Hash[keys.zip(values)], Python sử dụng dict(zip(keys, values)).

69. Phương thức map với block

Ruby:

arr = [1, 2, 3]
new_arr = arr.map { |x| x * 2 }
puts new_arr # [2, 4, 6]

Python:

arr = [1, 2, 3]
new_arr = list(map(lambda x: x * 2, arr))
print(new_arr) # [2, 4, 6]
  • Ruby có block tích hợp trong .map, Python sử dụng map() với lambda.

70. Tạo mảng từ range

Ruby:

arr = (1..5).to_a
puts arr # [1, 2, 3, 4, 5]

Python:

arr = list(range(1, 6))
print(arr) # [1, 2, 3, 4, 5]
  • Ruby sử dụng .to_a, Python sử dụng list(range()).

71. Thêm phần tử vào cuối mảng

Ruby:

arr = [1, 2, 3]
arr << 4
puts arr # [1, 2, 3, 4]

Python:

arr = [1, 2, 3]
arr.append(4)
print(arr) # [1, 2, 3, 4]
  • Ruby sử dụng <<, Python sử dụng .append().

72. Xóa phần tử cuối mảng

Ruby:

arr = [1, 2, 3]
arr.pop
puts arr # [1, 2]

Python:

arr = [1, 2, 3]
arr.pop()
print(arr) # [1, 2]
  • Cả hai đều sử dụng .pop().

73. Thêm phần tử vào đầu mảng

Ruby:

arr = [2, 3, 4]
arr.unshift(1)
puts arr # [1, 2, 3, 4]

Python:

arr = [2, 3, 4]
arr.insert(0, 1)
print(arr) # [1, 2, 3, 4]
  • Ruby sử dụng .unshift, Python sử dụng .insert() với index 0.

74. Xóa phần tử đầu mảng

Ruby:

arr = [1, 2, 3]
arr.shift
puts arr # [2, 3]

Python:

arr = [1, 2, 3]
arr.pop(0)
print(arr) # [2, 3]
  • Ruby sử dụng .shift, Python sử dụng .pop(0).

75. Kiểm tra giá trị có tồn tại trong mảng

Ruby:

arr = [1, 2, 3]
puts arr.include?(2) # true

Python:

arr = [1, 2, 3]
print(2 in arr) # True
  • Ruby sử dụng .include?, Python sử dụng từ khóa in.

76. Phương thức inject/reduce

Ruby:

arr = [1, 2, 3, 4]
sum = arr.inject(0) { |acc, x| acc + x }
puts sum # 10

Python:

from functools import reduce arr = [1, 2, 3, 4]
sum = reduce(lambda acc, x: acc + x, arr, 0)
print(sum) # 10
  • Ruby sử dụng .inject, Python sử dụng reduce() từ thư viện functools.

77. Tách chuỗi thành mảng

Ruby:

str = "a,b,c"
arr = str.split(",")
puts arr # ["a", "b", "c"]

Python:

str = "a,b,c"
arr = str.split(",")
print(arr) # ["a", "b", "c"]
  • Cả hai đều sử dụng .split().

78. Nối mảng thành chuỗi

Ruby:

arr = ["a", "b", "c"]
str = arr.join("-")
puts str # "a-b-c"

Python:

arr = ["a", "b", "c"]
str = "-".join(arr)
print(str) # "a-b-c"
  • Ruby sử dụng .join trên mảng, Python sử dụng .join trên chuỗi.

79. Tạo hash/dict rỗng

Ruby:

hash = {}
puts hash # {}

Python:

dict_data = {}
print(dict_data) # {}
  • Cả hai đều sử dụng {}.

80. Xóa key khỏi hash/dict

Ruby:

hash = { a: 1, b: 2, c: 3 }
hash.delete(:b)
puts hash # {:a=>1, :c=>3}

Python:

dict_data = { "a": 1, "b": 2, "c": 3 }
dict_data.pop("b")
print(dict_data) # {'a': 1, 'c': 3}
  • Ruby sử dụng .delete, Python sử dụng .pop().

81. Lặp qua hash/dict

Ruby:

hash = { a: 1, b: 2, c: 3 }
hash.each { |key, value| puts "#{key}: #{value}" }

Python:

dict_data = { "a": 1, "b": 2, "c": 3 }
for key, value in dict_data.items(): print(f"{key}: {value}")
  • Ruby sử dụng .each, Python sử dụng .items().

82. Xử lý giá trị mặc định khi key không tồn tại

Ruby:

hash = Hash.new("default")
puts hash[:key] # "default"

Python:

dict_data = {}
print(dict_data.get("key", "default")) # "default"
  • Ruby sử dụng Hash.new, Python sử dụng .get() với giá trị mặc định.

83. Khai báo lớp cơ bản

Ruby:

class Person def initialize(name) @name = name end def greet "Hello, #{@name}!" end
end person = Person.new("Alice")
puts person.greet # "Hello, Alice!"

Python:

class Person: def __init__(self, name): self.name = name def greet(self): return f"Hello, {self.name}!" person = Person("Alice")
print(person.greet()) # "Hello, Alice!"
  • Ruby sử dụng class, Python cũng sử dụng class, nhưng cú pháp khác nhau.

84. Phương thức select

Ruby:

arr = [1, 2, 3, 4, 5]
even = arr.select { |x| x.even? }
puts even # [2, 4]

Python:

arr = [1, 2, 3, 4, 5]
even = list(filter(lambda x: x % 2 == 0, arr))
print(even) # [2, 4]
  • Ruby sử dụng .select, Python sử dụng filter().

85. Lọc giá trị trong hash/dict

Ruby:

hash = { a: 1, b: 2, c: 3 }
filtered = hash.select { |key, value| value > 1 }
puts filtered # {:b=>2, :c=>3}

Python:

dict_data = { "a": 1, "b": 2, "c": 3 }
filtered = {k: v for k, v in dict_data.items() if v > 1}
print(filtered) # {'b': 2, 'c': 3}
  • Python sử dụng dictionary comprehension, Ruby sử dụng .select.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Bài toán tìm đường đi ngắn nhất với giải thuật Dijkstra

Với các bạn sinh viên chuyên ngành công nghệ thông tin, chắc không lạ gì với bài toán tìm đường đi ngắn nhất (Shortest Path Problems) trong đồ thị trọng số nữa. Ở bài viết lần này, mình sẽ làm 3 việc:.

0 0 135

- vừa được xem lúc

Tôi cá là bạn không biết những điều này - Ruby on rails ( Phần 2)

Các bạn có thể theo dõi phần 1 ở đây :. https://viblo.asia/p/toi-ca-la-ban-khong-biet-nhung-dieu-nay-ruby-on-rails-phan-1-WAyK8DDeKxX. 5.

0 0 222

- vừa được xem lúc

Những thay đổi trong ruby 3.0

. 2020 là một năm lớn đối với cộng đồng Ruby. Những người sáng lập Ruby có một món quà thực sự tuyệt vời cho chúng ta vào giáng sinh với việc phát hành Ruby 3.

0 0 47

- vừa được xem lúc

Có gì đặc biệt trong phiên bản Ruby 3x3 ?

Hello guys, chắc hẳn thời gian vừa rồi chúng ta cũng đã nghe qua thông tin Ruby sắp cho ra mắt Ruby version 3, hay còn được gọi là ruby 3x3, vậy liệu Ruby version 3 này có gì mới, và có những update nào đáng phải kể đến, và tại sao mọi người lại gọi nó là ruby version 3x3, thì trong bài ngày hôm nay

0 0 43

- vừa được xem lúc

Cách sử dụng class Time & Date trong Ruby (Phần 1)

Time là một class trong Ruby, nó sẽ giúp chỉnh sửa format, trích xuất thông tin một cách hiệu quả theo ý của bạn. . Topic hôm nay chúng ta có gì nào. .

0 0 97

- vừa được xem lúc

Ruby 3.0 có gì mới

Ruby 3.0.0 đã được ra mới được ra mắt vào tháng 12/2020, mục tiêu của bản 3.0.

0 0 41