Có phải là không thể tạo ra một chức năng mà về cơ bản đổi tên một chức năng tích hợp?


40

Tôi bị lẫn lộn giữa các hàm min và max, trong các ngữ cảnh nhất định.

Trong một ngữ cảnh, khi bạn đang sử dụng các hàm để lấy giá trị lớn hơn hoặc nhỏ hơn của hai giá trị, không có vấn đề gì. Ví dụ,

//how many autographed CD's can I give out?
int howManyAutographs(int CDs, int Cases, int Pens)
{
    //if no pens, then I cannot sign any autographs
    if (Pens == 0)
        return 0;

    //I cannot give away a CD without a case or a case without a CD
    return min(CDs, Cases);
}

Dễ dàng. Nhưng trong một bối cảnh khác, tôi bị lẫn lộn. Nếu tôi đang cố gắng đặt tối đa hoặc tối thiểu, tôi sẽ nhận được ngược lại.

//return the sum, with a maximum of 255
int cappedSumWRONG(int x, int y)
{
    return max(x + y, 255); //nope, this is wrong
}

//return the sum, with a maximum of 255
int cappedSumCORRECT(int x, int y)
{
    return min(x + y, 255); //much better, but counter-intuitive to my mind
}

Có phải là không thể thực hiện các chức năng của riêng tôi như sau?

//return x, with a maximum of max
int maximize(int x, int max)
{
    return min(x, max);
}

//return x, with a minimum of min
int minimize(int x, int min)
{
    return max(x, min)
}

Rõ ràng, sử dụng các nội trang sẽ nhanh hơn nhưng điều này có vẻ như là một sự tối ưu hóa vi mô không cần thiết đối với tôi. Có bất kỳ lý do khác điều này sẽ là không thể? Thế còn trong một dự án nhóm?


72
Nếu tối thiểu và tối đa làm tổn thương khả năng đọc của bạn, hãy xem xét trao đổi sau đó cho "nếu" thường xuyên. Đôi khi, đáng để viết thêm một chút mã để có khả năng đọc tốt hơn.
T. Sar - Tái lập Monica

23
với một bài viết ngắn, bạn đã phá hủy toàn bộ khái niệm "mã hóa sạch". Em chào anh!
Ewan

21
Có lẽ bạn có thể xem xét chức năng C ++ 11std::clamp hoặc một cái gì đó tương tự.
rwong

15
Có lẽ tên tốt hơn sẽ là up_to(cho min) và at_least(cho max)? Tôi nghĩ rằng chúng truyền đạt ý nghĩa tốt hơn minimize, v.v. mặc dù có thể mất một lúc suy nghĩ để nhận ra lý do tại sao chúng giao hoán.
Warbo

59
minmaxcũng minimizemaximizelà tên hoàn toàn sai cho các chức năng bạn muốn viết. Mặc định minmaxcó ý nghĩa hơn nhiều. Bạn thực sự đã có tên hàm đúng. Thao tác này được gọi là kẹp hoặc đóng nắp và bạn đã viết hai hàm giới hạn. Tôi muốn đề nghị capUpperBoundcapLowBound. Tôi không phải giải thích cho bất cứ ai làm điều đó, điều đó là hiển nhiên.
slebetman

Câu trả lời:


120

Như những người khác đã đề cập: không tạo một hàm có tên tương tự như hàm dựng sẵn, thư viện chuẩn hoặc hàm thường được sử dụng rộng rãi mà thay đổi hành vi của nó. Bạn có thể quen với quy ước đặt tên ngay cả khi nó không có ý nghĩa gì với bạn ngay từ cái nhìn đầu tiên nhưng sẽ không thể suy luận về chức năng của mã của bạn một khi bạn giới thiệu các chức năng khác làm điều tương tự nhưng có tên của họ hoán đổi.

Thay vì quá tải, các tên được sử dụng bởi thư viện tiêu chuẩn, hãy sử dụng các tên mới để truyền đạt chính xác ý của bạn. Trong trường hợp của bạn, bạn không thực sự quan tâm đến một mức tối thiểu của ED. Thay vào đó, bạn muốn giới hạn một giá trị. Về mặt toán học, đây là hoạt động tương tự nhưng về mặt ngữ nghĩa, nó không hoàn toàn. Vậy tại sao không chỉ là một chức năng

int cap(int value, int limit) { return (value > limit) ? limit : value; }

đó là những gì cần thiết và nói như vậy từ tên của nó. (Bạn cũng có thể thực hiện capvề minnhư trong timster 's câu trả lời ).

Một tên hàm thường được sử dụng là clamp. Phải mất ba đối số và kẹp kẹp một giá trị được cung cấp vào khoảng được xác định bởi hai giá trị khác.

int clamp(int value, int lower, int upper) {
    assert(lower <= upper);  // precondition check
    if (value < lower) return lower;
    else if (value > upper) return upper;
    else return value;
}

Nếu bạn đang sử dụng tên hàm thường được biết đến như vậy, bất kỳ người mới nào tham gia nhóm của bạn (bao gồm cả tương lai bạn sẽ quay lại mã sau một thời gian) sẽ nhanh chóng hiểu điều gì đang xảy ra thay vì nguyền rủa bạn vì đã nhầm lẫn họ bằng cách phá vỡ chúng kỳ vọng về tên chức năng mà họ nghĩ rằng họ biết.


2
Bạn cũng có thể đặt tên cho nó là getValueNotBiggerThan (x, giới hạn) đây là cách tiếp cận phù hợp và với một trình biên dịch hợp lý, hàm sẽ được nội tuyến và mã máy kết quả sẽ giống hệt như sử dụng tích hợp
Falco

20
@Falco Tôi có thể nói rằng, Cap cap gần như là một từ đồng nghĩa với giá trị nhận được không lớn hơn so với, nhưng tôi sẽ không vẽ chiếc xe đạp đó hôm nay. ;-)
5gon12eder

1
clampđược sử dụng rộng rãi trong tất cả các loại xử lý tín hiệu và các hoạt động tương tự (xử lý hình ảnh, v.v.), vì vậy đó chắc chắn là điều tôi sẽ làm với. Mặc dù tôi sẽ không nói rằng nó yêu cầu giới hạn trên và dưới: Tôi cũng đã thấy nó khá thường xuyên chỉ cho một hướng.
Voo

1
Cũng sẽ đề cập đến clamp. Và nếu nó được viết chính xác, bạn chỉ có thể sử dụng một giới hạn vô cực / vô cực âm khi bạn chỉ muốn nó bị ràng buộc theo một cách. Ví dụ: để đảm bảo rằng một số không lớn hơn 255 (nhưng không có giới hạn dưới), bạn sẽ sử dụng clamp(myNumber, -Infinity, 255).
Kat

115

Nếu bạn thực hiện một chức năng như thế khi minimize(4, 10)trả về 10 , thì tôi sẽ nói điều đó là không thể bởi vì các lập trình viên đồng nghiệp của bạn có thể bóp nghẹt bạn.

(Được rồi, có thể họ sẽ không bóp cổ bạn đến chết theo nghĩa đen, nhưng nghiêm túc ... Đừng làm vậy.)


2
Cũng hoàn toàn có thể là khi bạn quay lại làm việc với mã này trong một vài năm, bản thân bạn sẽ mất vài giờ để tìm hiểu tại sao số liệu của bạn sai khi bạn gọi tối thiểu hóa ...
Paddy

À ... câu trả lời này đã từng có một bình luận thực sự hay (và được đánh giá khá cao). (Đây cũng là nhận xét đầu tiên về câu trả lời, giúp dòng chảy hài hước.)
TOOGAM

Tôi tiếp tục muốn nhận thẻ đục lỗ và gạch bỏ DO NOT(ngoài "KHÔNG trục chính, gấp hoặc cắt xén"). Ai đó đã thực hiện một cái gì đó như thế này sẽ nhận được một thẻ.
Đồng hồ-Muse

26

Bí danh một chức năng là tốt, nhưng đừng cố gắng thay đổi ý nghĩa của các thuật ngữ hiện có

Bạn có thể tạo bí danh cho hàm - các thư viện thông thường luôn làm điều đó .

Tuy nhiên, đó là một ý tưởng tồi khi sử dụng các thuật ngữ theo cách trái ngược với cách sử dụng thông thường, như ví dụ của bạn, nơi mà tâm trí của bạn tối đa và tối thiểu nên được lật. Điều đó gây nhầm lẫn cho các lập trình viên khác, và bạn sẽ tự làm mất tinh thần bằng cách tự rèn luyện để tiếp tục diễn giải các thuật ngữ này theo cách không chuẩn.

Vì vậy, trong trường hợp của bạn, hãy từ bỏ cách nói "tối thiểu / tối đa" mà bạn thấy khó hiểu và tạo mã riêng, dễ hiểu.

Tái cấu trúc ví dụ của bạn:

int apply_upper_bound(int x, int y)
{
    return min(x, y);
}


int apply_lower_bound(int x, int y)
{
    return max(x, y)
}

Là một phần thưởng bổ sung, mỗi khi bạn nhìn vào mã này, bạn sẽ tự nhắc nhở mình cách sử dụng tối thiểutối đa trong ngôn ngữ lập trình của bạn. Cuối cùng, nó sẽ có ý nghĩa trong đầu của bạn.


4
Tôi nghĩ rằng bạn đã hiểu nhầm ứng dụng minmaxkhiến OP nhầm lẫn. Đó là khi minđược sử dụng để đặt ranh giới trên cố định trên một số giá trị. get_lower_valuesẽ chỉ là phản trực giác trong ứng dụng này. Nếu tôi chọn một tên thay thế cho thao tác này, tôi sẽ gọi nó là supremum , mặc dù tôi không chắc có bao nhiêu lập trình viên sẽ hiểu ngay điều đó.
leftaroundabout

3
@leftaroundabout: supremum của tập {1, 2} là 2, vì vậy không sử dụng tên supremumcho hàm get_lower_valueđược xác định ở trên để chỉ gọi min. Nó gây ra các lập trình viên tiếp theo chính xác cùng một vấn đề như gọi nó maximise. Tôi khuyên bạn nên gọi nó apply_upper_bound, nhưng tôi không chắc là nó hoàn hảo. Nó vẫn kỳ quặc bởi vì nó hoạt động giống như bất kỳ cách nào xung quanh bạn đặt các tham số, nhưng tên ngụ ý rằng một trong các tham số là "giá trị" và cái còn lại là "ràng buộc" và chúng khác nhau.
Steve Jessop

1
Tôi nghĩ rằng về cơ bản, bạn dựa vào người đọc không quá quen thuộc với từ supremum, để họ hiểu nghĩa của bạn hơn là nghĩa tiếng Anh. Thật tốt khi định nghĩa biệt ngữ cục bộ cho mã của bạn, nhưng loại điểm của câu hỏi là làm gì khi biệt ngữ bạn muốn trực tiếp mâu thuẫn với một ý nghĩa đã quen thuộc và tôi sợ rằng tôi nghĩ bạn vẫn đang làm điều đó (vì một số phiên bản "tiếng Anh" chỉ liên quan đến những người đã học các môn STEM)
Steve Jessop

3
Chính sách này "Bí danh một chức năng là tốt, nhưng đừng cố gắng thay đổi ý nghĩa của các thuật ngữ hiện có" được thể hiện hoàn hảo và đẹp mắt. Thứ hai, ý tưởng rằng bạn không nên đổi tên theo cách gây nhầm lẫn liên quan đến các hàm tích hợp (và: ngay cả khi các hàm tích hợp có tên kém / ngu ngốc / khó hiểu) là một ý tưởng hoàn hảo. Ví dụ tối đa / tối thiểu xuất hiện trên trang này, đó là sự nhầm lẫn hoàn toàn.
Fattie

1
OK, tôi đã chỉnh sửa câu trả lời để sử dụng "application_upper_bound", cả hai đều phù hợp với lý luận của OP và tránh thuật ngữ quá tải. Độ dài không phải là một vấn đề. Tôi không định viết tên phương thức hoàn hảo ở đây, chỉ đặt một số quy tắc cơ bản để đặt tên bí danh. OP có thể chỉnh sửa nó thành bất cứ điều gì anh ấy thấy rõ ràng và súc tích nhất.
Tim Grant

12

Tôi thích câu hỏi này. Hãy phá vỡ nó đi.

1: Bạn có nên bọc một dòng mã?

Vâng, tôi có thể nghĩ ra rất nhiều ví dụ mà bạn có thể làm điều này. Có thể bạn đang thực thi các tham số đã nhập hoặc ẩn một triển khai cụ thể đằng sau một giao diện. Trong ví dụ của bạn, về cơ bản bạn đang ẩn một cuộc gọi phương thức tĩnh.

Ngoài ra, bạn có thể làm rất nhiều thứ trong một dòng trong những ngày này.

2: Có phải tên 'Min' và 'Max' khó hiểu

Vâng! Họ hoàn toàn là vậy! Một guru mã hóa sạch sẽ đổi tên chúng thành "FunctionWhichReturnsTheLargestOfItsParameter" hoặc một cái gì đó. May mắn thay, chúng tôi có tài liệu và (nếu bạn may mắn) IntelliSense và nhận xét để giúp chúng tôi để bất kỳ ai bị nhầm lẫn với tên đều có thể đọc được những gì họ phải làm.

3: Bạn có nên đổi tên chúng thành một cái gì đó khác cho mình.

Yup, đi cho nó. Chẳng hạn, bạn có thể có:

class Employee
{
    int NumberOfHolidayDaysIShouldHave(int daysInLue, int maxAllowableHolidayDays)
    {
         // Return the number of days in lue, but keep the value under the max allowable holiday days!
         // Don't use max, you fool!!
         return Math.Max(daysInLue, maxAllowableHolidayDays)
    }
}

Nó thêm ý nghĩa và người gọi không cần phải biết cách tính giá trị.

4: Bạn có nên đổi tên "min" thành "tối đa hóa"

Không!! bạn điên à?! Nhưng có, câu hỏi nhấn mạnh điểm mà những người khác nhau đọc các ý nghĩa khác nhau thành tên hàm và đối tượng. Những gì một người tìm thấy rõ ràng và thông thường người khác tìm thấy mờ đục và khó hiểu. Đó là lý do tại sao chúng tôi có ý kiến. Thay vào đó bạn nên viết:

// Add x and y, but don't let it go over 255
s = min(x + y, 255);

Rồi khi ai đó đọc

// Add x and y, but don't let it go over 255
s = max(x + y, 255);

họ biết bạn đã làm sai.


6
Buồn cười! Trong ví dụ của bạn, bạn đã mắc lỗi chính xác mà op quan tâm: bạn muốn số ngày nghỉ không lớn hơn maxHolidayowow, vì vậy bạn không nhận được (a, b)
Falco

14
Nếu mã sạch thực sự gợi ý rằng những cái tên lố bịch như FunctionWhichReturnsTheLargestOfItsParameterslà một điều tốt, tôi muốn không có phần nào của nó.
David Hammen

1
@Falco lol ôi !!!
Ewan

4
@DavidHammen: thực sự không phải vậy, vì không có phong cách lập trình thực sự nào đặt mụn cóc FunctionWhichReturnslên trước mọi chức năng (điều đó không tạo ra ngoại lệ hoặc chấm dứt). Bạn có thể kết thúc với getMinimum, getLarger(hoặc getLargestvới hơn 2 đầu vào) tuy nhiên, bằng cách làm theo những lời khuyên thực dọc theo dòng rằng (a) các chức năng tinh khiết và / hoặc "thu khí" nên sử dụng các mụn cóc get, từ (b) bằng tiếng Anh nên không được viết tắt trong tên. Rõ ràng đó là quá dài dòng cho những người quyết định gọi các chức năng như vậy max.
Steve Jessop

1
vâng, xem bình luận của @ falco. Tôi thực sự không thể sửa nó sau đó!
Ewan

4

Không . Không tạo các hàm có tên rất giống với các hàm dựng sẵn, nhưng thực tế thì ngược lại . Nó có vẻ trực quan với bạn, nhưng sẽ rất khó hiểu với các nhà phát triển khác, và thậm chí với chính bạn một thời gian trong tương lai khi bạn có nhiều kinh nghiệm hơn.

Ý nghĩa của max"tối đa là", nhưng sự hiểu biết "trực quan" của bạn là một cái gì đó như "đến mức tối đa". Nhưng điều này chỉ đơn giản là một sự hiểu biết sai về chức năng và việc thay đổi tên từ maxthành maximumkhông truyền đạt cách hiểu khác nhau của bạn. Ngay cả khi bạn tin tưởng mạnh mẽ rằng các nhà thiết kế ngôn ngữ đã mắc lỗi, đừng làm điều gì đó như thế này.

Nhưng thay đổi tên để nói cap(x, limit)như đã được đề xuất sẽ ổn, vì rõ ràng nó truyền đạt ý định, ngay cả khi nó chỉ kết thúc tốt đẹp min.


3

Điều có thể khiến bạn bối rối là sử dụng Capped trong tên hàm của bạn hoặc sự hiểu biết của bạn về việc đặt nắp có nghĩa là gì. Nó là một giới hạn và không yêu cầu tối đa bất cứ điều gì.

Nếu bạn được hỏi thấp nhất, nhỏ nhất hoặc sớm nhất, bạn có cảm thấy Max là chức năng phù hợp không?

Để lại tối thiểu và tối đa một mình. Viết bài kiểm tra để ít nhất bạn sẽ làm cho nó đúng lần thứ hai.

Nếu bạn được yêu cầu sử dụng các chức năng này rất nhiều trong dự án của mình, bạn sẽ đưa ra một số gợi ý để giúp bạn làm rõ nên sử dụng chức năng nào. Sắp xếp giống như <hoặc>, phần rộng của miệng phải đối mặt với giá trị lớn hơn.


1
+1 cho sự nhầm lẫn thuật ngữ có thể là một vấn đề tiềm ẩn. Tôi nghĩ rằng sự nhầm lẫn bắt đầu từ nhận xét "trả lại tổng, với mức tối đa là 255", vì vậy anh ta nghĩ rằng maxchức năng này phù hợp hơn, nhưng logic-khôn ngoan minlà thứ anh ta thực sự tìm kiếm.
Revenant

2

Để trả lời câu hỏi của bạn: Có bất kỳ lý do nào khác điều này sẽ không thể hiểu được? Thế còn trong một dự án nhóm? Nó có ý nghĩa rằng bạn muốn các chức năng của riêng bạn, không có vấn đề. Chỉ cần đảm bảo rằng họ đang ở trong lớp người trợ giúp của riêng bạn và không dễ gọi cho người khác trừ khi họ nhập nó. (Joes.Utilities.)

Nhưng để nhìn lại vấn đề của bạn, về cơ bản, tôi sẽ nghĩ:

return (input >= 255) ? 255 : input;

Bạn đang bối rối vì bạn đang cố gắng áp dụng logic não của mình cho các chức năng tối thiểu / tối đa này. Thay vào đó chỉ nói bằng tiếng Anh. ifnhững inputgreater than or equal to 255 then return 255trường hợp returncác input.

Đó là:

if (input >= 255) {
   255 
} else {
   input
}

Quan điểm của tôi. Bạn đang sử dụng các hàm max \ min vì những lý do sai, tốc độ của những thứ này là không đáng kể. Làm những gì có ý nghĩa.


1
Một trong những đồng nghiệp cấp cao của tôi luôn nói "Hãy để máy tính làm suy nghĩ cho bạn".

1

Trong khi tôi hiểu vấn đề của bạn, tôi sẽ miễn cưỡng làm điều này. Sẽ tốt hơn nếu chỉ cần khoan vào hộp sọ của bạn những gì min () và max () làm.

Hầu hết các lập trình viên đều biết các hàm min () và max () làm gì - ngay cả khi, giống như bạn, đôi khi họ phải vật lộn với trực giác của mình để sử dụng bất cứ lúc nào. Nếu tôi đang đọc một chương trình và thấy max (x, y), tôi sẽ biết ngay nó làm gì. Nếu bạn tạo chức năng "bí danh" của riêng mình, thì bất kỳ ai khác đọc mã của bạn sẽ không biết bí danh này làm gì. Họ phải tìm chức năng của bạn. Nó không cần thiết phá vỡ dòng chảy của việc đọc và buộc người đọc phải suy nghĩ thêm để hiểu chương trình của bạn.

Nếu bạn gặp khó khăn trong việc tìm ra cách sử dụng tại một số điểm, tôi nói, hãy thêm một nhận xét giải thích nó. Sau đó, nếu một người đọc trong tương lai bị nhầm lẫn tương tự, bình luận của bạn sẽ làm rõ nó. Hoặc nếu bạn làm sai nhưng nhận xét giải thích những gì bạn đang cố gắng làm, người cố gắng gỡ lỗi sẽ có manh mối.

Khi bạn đặt bí danh cho một hàm vì tên đó đụng độ với trực giác của bạn ... đây có phải là trường hợp duy nhất có vấn đề không? Hoặc bạn sẽ bí danh các chức năng khác? Có thể bạn đang bối rối khi "đọc" và thấy dễ dàng hơn khi nghĩ nó là "chấp nhận", bạn thay đổi "nối" thành "StringTogether", "round" thành "DropDecimals", v.v., v.v ... Hãy biến điều này thành cực kỳ lố bịch và các chương trình của bạn sẽ không thể hiểu được.

Thật vậy, nhiều năm trước tôi đã làm việc với một lập trình viên không thích tất cả các dấu câu trong C. Vì vậy, anh ta đã viết một loạt các macro để cho anh ta viết "THEN" thay vì "{" và "END-IF" thay vì "}" và hàng tá những sự thay thế khác. Vì vậy, khi bạn cố đọc các chương trình của anh ấy, nó thậm chí không còn giống C nữa, nó giống như phải học một ngôn ngữ hoàn toàn mới. Bây giờ tôi không nhớ là "VÀ" được dịch thành "&" hay "&&" - và đó là điểm chính. Bạn làm suy yếu những người đầu tư đã thực hiện trong việc học ngôn ngữ và thư viện.

Điều đó nói rằng, tôi sẽ không nói rằng một hàm không làm gì ngoài việc gọi một hàm thư viện chuẩn là nhất thiết phải xấu. Nếu quan điểm của chức năng của bạn không phải là tạo bí danh, mà là đóng gói hành vi chỉ xảy ra là một chức năng duy nhất, thì điều này có thể tốt và đúng đắn. Ý tôi là, nếu theo logic và chắc chắn bạn phải thực hiện tối đa tại thời điểm này trong chương trình, thì chỉ cần gọi trực tiếp tối đa. Nhưng nếu bạn phải thực hiện một số tính toán mà ngày nay yêu cầu tối đa, nhưng điều đó có thể được sửa đổi trong tương lai để làm một cái gì đó khác, thì một hàm trung gian là phù hợp.


0

Bạn có thể đổi tên các hàm được xây dựng với điều kiện là các tên mới giúp mã của bạn rõ ràng hơn và sẽ không bị ai hiểu. (Nếu bạn đang sử dụng C / C. .

Bạn không phải là người duy nhất gặp vấn đề này với min và max, tuy nhiên tôi vẫn chưa thấy một giải pháp chung tốt nào hoạt động trên tất cả các miền. Tôi nghĩ một vấn đề với việc đặt tên của các hàm này là hai đối số có ý nghĩa logic khác nhau, nhưng được trình bày có nghĩa giống nhau.

Nếu ngôn ngữ của bạn cho phép, bạn có thể thử

return  calculatedDiscount.ButNoMoreThen(maxAllowedDiscount)

return  CDsInStocked.ButNoMoreThen(CasesInStock)

0

Không.

Bạn không viết giấy gói của bạn. Tên của các hàm bao không quan trọng lắm.

Những gì bạn đang cố gắng làm là một loại mã xác thực. Bạn đang phát minh ra một lớp bổ sung phục vụ 2 mục đích:

  1. Người khác không thể hiểu mã của bạn.
  2. Bạn không bao giờ học cách hiểu mã của người khác.

Bằng cách che giấu những thứ bạn không thoải mái, bạn chỉ làm tổn thương mã của bạn bây giờ và chính bạn trong tương lai. Bạn không thể phát triển bằng cách ở trong vùng thoải mái của bạn. Những gì bạn cần là tìm hiểu làm thế nào minmaxlàm việc.


-1

Đó là Ok, và không thực sự phản trực giác khi sử dụng Min, Max để kiểm tra lại và hoàn thành. Điều này cũng được thực hiện bằng cách sử dụng:

  • sàn () và trần ()
  • kẹp, giới hạn, giới hạn
  • và tất nhiên mod với cắt ngắn thứ tự cao.

Trong phần sụn, nó xuất hiện xa hơn MMX, bản thân nó có trước đồ họa 3D hiện đại dựa trên extensivley này.

Thay thế một chức năng tiêu chuẩn công nghiệp ngay cả tại địa phương sẽ làm tôi lo lắng, một tên phái sinh có thể tốt hơn. Sinh viên C ++ có thể quá tải cho lớp tối nghĩa của họ có lẽ.


Tôi xin lỗi, MMX là gì?
Tobia Tesan

Tôi đã nghĩ đến "các giá trị bão hòa", trong đó kết quả được giới hạn ở mức giới hạn. Ý tưởng là mã có thể đơn giản hơn nếu nó không phải bao gồm các thử nghiệm vượt biên và tràn (trong đồ họa để tránh đi xe đạp hoặc đi tích cực bằng cách vượt qua giới hạn tiêu cực). PSUBSB / PSUBSW. Tôi thừa nhận cơ chế có thể không giống nhau, nhưng hiệu quả và mục đích của chức năng là.
mckenzm

-1

Đó là tốt trong một số trường hợp, nhưng không trong ví dụ của bạn, bởi vì có những cách tốt hơn để từ đó:
saturate, clamp, clipvv


-1

Tôi muốn tạo ra một hàm chung có tên là 'giới hạn'

//Assumes lower_bound <= upper_bound
template <typename T>
T bounded(T value, T lower_bound, T upper_bound){
    if (value < lower_bound)
        return lower_bound;
    if (value > upper_bound)
        return upper_bound;
    return value;
}

//Checks an upper (by default) or lower bound
template <typename T>
T bounded(T value, T bound, bool is_upper_bound = true){
    if (is_upper_bound){
        if (value > bound)
            return bound;
    }
    else {
        if (value < bound)
            return bound;
    }
    return value;
}

hoặc với việc sử dụng 'min' và 'max'

//Assumes lower_bound <= upper_bound
template <typename T>
T bounded(T value, T lower_bound, T upper_bound){
    return max(min(value, upper_bound), lower_bound);
}

//Checks an upper (by default) or lower bound
template <typename T>
T bounded(T value, T bound, bool is_upper_bound = true){
    if (is_upper_bound)
        return min(value, bound);
    else
        return max(value, bound);
}

-1

Điều gì về việc gọi các chức năng của bạn:

atmost(x,255): trả về mức thấp nhất của x hoặc 255.

atleast(10,x): trả về giá trị cao hơn của x hoặc ít nhất là 10.


-1

min(x+y, MAX_VALUE); sẽ mang nhiều ý nghĩa hơn myCustomFunction(x, y);

Vì vậy, câu trả lời là CÓ, nó là không thể tin được . Nó chỉ phục vụ như một bí danh cho ngôn ngữ não của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.