Định nghĩa của bạn không đánh tôi là chính xác. Một thành ngữ là một cách viết một cái gì đó có thể hoặc không thể có trong các ngôn ngữ khác, nhưng đó là điều phổ biến trong ngôn ngữ này. Thông thường, nó ngắn hơn giải pháp thay thế, nhưng đó không thực sự là một yêu cầu.
Có thể dễ dàng hơn để giải thích nó bằng cách nói về những gì không phải là thành ngữ. Trong C ++, nó khá thành ngữ để viết:
Foo* p = SomeThingThatReturnsAFooPointer(arg, param, x, y);
if(p)
{
// whatever
}
Nó thậm chí còn thành ngữ hơn để viết:
Foo* p;
if(p = SomeThingThatReturnsAFooPointer(arg, param, x, y))
{
// whatever
}
Mã này thực hiện chính xác điều tương tự - một số người mới sử dụng C ++ có thể đọc nó dưới dạng thử nghiệm để xem liệu p có bằng với những gì hàm trả về không, nhưng đó không phải là những gì nó làm.
So sánh với những gì ai đó có thể viết, rất phi thành ngữ, người đến từ ngôn ngữ khác:
Foo* p = SomeThingThatReturnsAFooPointer(arg, param, x, y);
if(p !=NULL)
{
// whatever
}
Bạn cũng sẽ thấy nội dung này bị loại là không thành ngữ:
if (x>0)
return true;
else
return false;
Bởi vì cách tiếp cận thành ngữ là
return (x>0);
Các cách không thành ngữ không sai, nhưng chúng thường mất nhiều thời gian hơn để gõ và chúng luôn mất nhiều thời gian hơn để đọc, cho những người biết thành ngữ này. Nếu tôi gọi bạn là "cậu bé khóc sói" và bạn biết câu chuyện, nó sẽ nhanh hơn nếu tôi giải thích về việc báo động sai khiến mọi người bỏ qua bạn như thế nào. Tất nhiên, vấn đề là nếu bạn không biết câu chuyện và không biết những con sói phải làm gì với những gì chúng ta đang nói. Tương tự, nó có thể là một vấn đề nếu bạn chưa từng thấy return x<y;
trước đây và thực sự không biết nó làm gì.