Tại sao int dài có công cụ sửa đổi chữ, nhưng ngắn int thì không?
Câu hỏi đặt ra là "tại sao C# không có tính năng này?" Câu trả lời cho câu hỏi đó luôn giống nhau. Các tính năng chưa được thực hiện theo mặc định; C# không có tính năng đó vì không có ai thiết kế, triển khai và vận chuyển tính năng này cho khách hàng.
Sự vắng mặt của đối tượng địa lý không cần biện minh. Thay vào đó, tất cả các tính năng phải được chứng minh bằng cách cho thấy rằng lợi ích của chúng vượt quá chi phí của chúng. Là người đề xuất tính năng này, onus là để bạn mô tả lý do tại sao bạn cho rằng tính năng này có giá trị; onus không phải là trên tôi để giải thích tại sao nó không phải là.
Có thể có lý do chính đáng để cung cấp công cụ sửa đổi chữ cho một số loại, nhưng không phải cho tất cả. Nó là gì?
Bây giờ, đó là một câu hỏi đáng trả lời hơn. Bây giờ câu hỏi đặt ra là "cái gì biện minh cho hậu tố theo chiều dài, và tại sao đó cũng không phải là lý do cho hậu tố tương tự về chữ viết tắt?"
Các số nguyên có thể được sử dụng cho nhiều mục đích khác nhau. Bạn có thể sử dụng chúng làm số học số. Bạn có thể sử dụng chúng làm bộ sưu tập cờ bit. Bạn có thể sử dụng chúng như các chỉ mục thành các mảng. Và có rất nhiều mục đích đặc biệt hơn. Nhưng tôi nghĩ rằng nó là công bằng để nói rằng hầu hết thời gian, số nguyên được sử dụng như số học số học.
Phần lớn các tính toán được thực hiện theo số nguyên bởi các chương trình bình thường bao gồm các số xa, nhỏ hơn nhiều so với dãy số nguyên 32 bit - khoảng +/- hai tỷ. Và rất nhiều phần cứng hiện đại là cực kỳ hiệu quả khi giao dịch chỉ với 32 bit số nguyên. Do đó, làm cho tinh thần để làm cho đại diện mặc định của các số được ký 32 bit số nguyên. Vì vậy, C# được thiết kế để thực hiện các phép tính liên quan đến các số nguyên được ký 32 bit trông hoàn toàn bình thường; khi bạn nói "x = x + 1" mà "1" được hiểu là một số nguyên 32 bit có dấu, và tỷ lệ cược là tốt mà x là quá, và kết quả của tổng là quá.
Điều gì sẽ xảy ra nếu tính toán không thể tách rời nhưng không vừa với phạm vi số nguyên 32 bit?các số nguyên 64 bit "dài" là một bước tiếp theo hợp lý; chúng cũng hiệu quả trên rất nhiều phần cứng và thời gian dài có một phạm vi đáp ứng nhu cầu của khá nhiều người không làm tổ hợp nhiệm vụ nặng có liên quan đến số lượng cực lớn. Do đó nó có ý nghĩa để có một số cách để xác định rõ ràng và chính xác trong mã nguồn mà chữ này ở đây được coi là một số nguyên dài.
Tình huống tương tác hoặc các tình huống trong đó các số nguyên được sử dụng làm trường bit, thường yêu cầu sử dụng các số nguyên không dấu. Một lần nữa, nó có ý nghĩa để có một cách rõ ràng và chính xác xác định rằng chữ này được dự định để được coi là một số nguyên không dấu.
Vì vậy, tổng hợp, khi bạn thấy "1", tỷ lệ cược là tốt mà phần lớn thời gian người dùng dự định sử dụng nó làm số nguyên có dấu 32 bit. Các trường hợp có khả năng nhất tiếp theo là người dùng dự định nó là một số nguyên dài hoặc một unsigned int hoặc unsigned long. Vì vậy, có những hậu tố ngắn gọn cho mỗi trường hợp đó.
Do đó, đối tượng địa lý được hợp lý hóa.
Tại sao đó không phải là biện minh cho quần short?
Vì trước tiên, trong mọi ngữ cảnh trong đó đoạn mã ngắn là hợp pháp, việc sử dụng chữ số nguyên là hợp pháp. "short x = 1;" hoàn toàn hợp pháp; trình biên dịch nhận ra rằng số nguyên phù hợp với một đoạn ngắn và cho phép bạn sử dụng nó.
Thứ hai, số học không bao giờ được thực hiện trong quần short trong C#. Số học có thể được thực hiện trong ints, uints, longs và ulongs, nhưng số học là không bao giờ thực hiện trong quần short. Quần short quảng bá cho int và số học được thực hiện trong ints, bởi vì như tôi đã nói trước đây, phần lớn các tính toán số học phù hợp với một int. Đại đa số làm không phải phù hợp với một đoạn ngắn. Số học ngắn có thể là chậm hơn trên phần cứng hiện đại được tối ưu hóa cho ints và số học ngắn không chiếm ít không gian hơn; nó sẽ được thực hiện trong ints hoặc longs trên chip.
Bạn muốn hậu tố "dài" cho trình biên dịch "số học này cần phải thực hiện trong thời gian dài" nhưng hậu tố "ngắn" không cho trình biên dịch biết "số học này cần được thực hiện trong quần short" không phải là một tính năng của ngôn ngữ C# để bắt đầu.
Lý do cung cấp hậu tố dài và cú pháp không dấu không áp dụng cho quần short. Nếu bạn cho rằng có lợi ích hấp dẫn đối với đối tượng địa lý, hãy nêu rõ lợi ích là gì. Không có lợi ích để biện minh cho chi phí của nó, tính năng này sẽ không được thực hiện trong C#.
Hãy xem câu hỏi này (và câu trả lời của Eric Lippert): http://stackoverflow.com/questions/1678591/why-are-number-suffixes-necessary –