Nếu không dùng hàm void thì một hàm có thể return ra nhiều gía trị không?

mọi người cho em hỏi nếu ko dung hàm void thì một hàm có thể return ra nhiều gí trị không vậy
thanks

  1. Return ra nhiều giá trị, trong nhiều ngôn ngữ lập trình sử dụng yield.
  2. Mình đoán bạn không hỏi về cái mình trả lời, vì vế trước (“nếu không dùng hàm void”) cho thấy bạn mới học lập trình, câu hỏi của bạn không rõ ý. Bạn có thể nói rõ vấn đề hơn không?
3 Likes

nếu trong C bạn có thể dùng struct, hay những ngôn ngữ tương tự có cấu trúc giống struct , hay các cấu trúc tương tự struct.

1 Like

Hoặc return một mảng, một danh sách…

1 Like

có thể nói rõ cho em cách return ra một mảng không ạ
ví dụ cách return ra vị trí các kí tự trùng nhau trong 1 xâu.
em cảm ơn

Nguyên lí chung thế này:


Nếu ngôn ngữ lập trình (PL) hỗ trợ kiểu tuple thì cứ dùng tuple luôn.
Tuy nhiên, nếu PL bạn đang dùng không có kiểu tuple, bạn có các cách vượt rào như sau:

  • Dùng struct { v0: type1, v2: type, ... }, gặp function nào thì tạo struct đó. Đặt tên struct cho có ý nghĩa chút.
  • Nếu PL hỗ trợ template programming, tạo hàng loạt class hoặc struct có dạng Tuple2<T1,T2>, Tuple3<T1,T2,T3>, …, Tuple15<T1,T2,...,T15>. Function chỉ cần khai báo return type là TupleN thôi.
  • Function trả về array hoặc list.

Nếu bạn sử dụng named tuple, dạng (name: "mouse", age: 1). PL nào hỗ trợ named tuple thì đơn giản. Nhưng nếu không hỗ trợ thì có các cách:

  • Sử dụng struct, chỉ cần chú ý đặt tên struct và tên từng field trong struct có ý nghĩa.
  • Sử dụng data structure map, phù hợp với các dynamic language, còn các ngôn ngữ static typed language thì đôi lúc không dùng được vì phải khai báo kiểu cho “value”.

Nếu sử dụng tuple thì có các trường hợp đặc biệt của tuple như sau:

TH1: Maybe<T>, Optional<T>, Option<T>, T?

Maybe<T> là tuple có 3 giá trị. Vị trí 1có kiểu là T, vị trí thứ 2 kiểu Null, Undefined, Nothing (tuỳ PL) biểu thị không có giá trị, vị trí thứ 3 biểu thị index giá trị của Maybe<T> ở vị trí 1 hay 2.
Ví dụ:

  • ("mouse", null, 1) -> "mouse"
  • ("chuot", null, 2) -> null

Một số ngôn ngữ hiện đại hỗ trợ cú pháp ngắn hơn là T?.

TH2: Either<T, Err>

Either<T, Err> cũng có 3 giá trị. Vị trí 1 kiểu T, vị trí 2 kiểu Error, Exception, Throwable (tuỳ PL), vị trí 3 biểu thị index 1 hoặc 2.
Ví dụ:

  • ("NotFound", Error("NotFound"), 2) -> Error("NotFound")
  • (Department(id=21, name="C21"), null, 1) -> Department(id=21, name="C21")
4 Likes

trong c thì không có khái niệm return ra một mảng. (có gì sai mong mọi người chỉ giúp)

cách tiếp cận này không được thì tiếp cận cách khác.

chẳng hạn bạn có thể khai báo 2 mảng global, thêm 1 mảng ngoài cái mảng bạn đầu của bạn để lưu lại các vị trí trùng nhau (có giá trị bằng nhau)

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?