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
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?
- Return ra nhiều giá trị, trong nhiều ngôn ngữ lập trình sử dụng yield.
- 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?
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.
Hoặc return một mảng, một danh sách…
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àTupleNthô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")
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?