UNSAFECSHARP Telegram 232
checked/unchecked

Встречали ли вы эти слова в коде? Думаю, что вряд ли. А все потому что в основном мы работаем с числами и относимся к ним как к хранилищу. Большинство вообще используют int и float, а если будут хранить большие числа - ну long и double. Для каких-нибудь ГК игр используют BigInteger при необходимости. И на самом деле большинство никогда не задумывается «а что будет если».

Но вернемся к теме. В шарпе по-умолчанию число int.MaxValue + 1 вернет результат без исключения и будет равно int.MinValue. То есть по сути будет ходить по кругу. Иногда это критично для некоторых кейсов, поэтому используют блок checked:


value = int.MaxValue;
checked {
value += 1; // тут мы получим исключение
}


Тем самым можно поймать исключение, которое потом правильно обработать, ну или получить исключение в правильном месте. Ведь где-нибудь мы считали индекс массива, он стал минусовым, а потом где-нибудь совершенно в другом месте упал с ошибкой «чет индекс не попадает в рамки массива». И хорошо, если это индекс массива, а если просто число, которое влияет на логику выполнения и в какой-то момент у вас что-нибудь начнет крутиться в другую сторону?

Аналогично checked существует и unchecked:


value = int.MaxValue;
unchecked {
value += 1; // тут исключения не будет, число будет равно минимальному значению
}


На самом деле хоть unchecked - это поведение по-умолчанию, все равно его можно переопределить параметром компилятора.

Также существуют checked/unchecked операторы для более котороткой записи:

return checked(value + 1);


Для контекста переполнения важен контекст (странно даже), то есть если вы будете вызывать метод внутри checked, внутри которого будет переполнение, то исключения не будет, это важно не забыть.

#basics #overflow
👍42🔥112🦄2



tgoop.com/unsafecsharp/232
Create:
Last Update:

checked/unchecked

Встречали ли вы эти слова в коде? Думаю, что вряд ли. А все потому что в основном мы работаем с числами и относимся к ним как к хранилищу. Большинство вообще используют int и float, а если будут хранить большие числа - ну long и double. Для каких-нибудь ГК игр используют BigInteger при необходимости. И на самом деле большинство никогда не задумывается «а что будет если».

Но вернемся к теме. В шарпе по-умолчанию число int.MaxValue + 1 вернет результат без исключения и будет равно int.MinValue. То есть по сути будет ходить по кругу. Иногда это критично для некоторых кейсов, поэтому используют блок checked:


value = int.MaxValue;
checked {
value += 1; // тут мы получим исключение
}


Тем самым можно поймать исключение, которое потом правильно обработать, ну или получить исключение в правильном месте. Ведь где-нибудь мы считали индекс массива, он стал минусовым, а потом где-нибудь совершенно в другом месте упал с ошибкой «чет индекс не попадает в рамки массива». И хорошо, если это индекс массива, а если просто число, которое влияет на логику выполнения и в какой-то момент у вас что-нибудь начнет крутиться в другую сторону?

Аналогично checked существует и unchecked:


value = int.MaxValue;
unchecked {
value += 1; // тут исключения не будет, число будет равно минимальному значению
}


На самом деле хоть unchecked - это поведение по-умолчанию, все равно его можно переопределить параметром компилятора.

Также существуют checked/unchecked операторы для более котороткой записи:

return checked(value + 1);


Для контекста переполнения важен контекст (странно даже), то есть если вы будете вызывать метод внутри checked, внутри которого будет переполнение, то исключения не будет, это важно не забыть.

#basics #overflow

BY Unity: Всё, что вы не знали о разработке


Share with your friend now:
tgoop.com/unsafecsharp/232

View MORE
Open in Telegram


Telegram News

Date: |

To view your bio, click the Menu icon and select “View channel info.” Your posting frequency depends on the topic of your channel. If you have a news channel, it’s OK to publish new content every day (or even every hour). For other industries, stick with 2-3 large posts a week. Don’t publish new content at nighttime. Since not all users disable notifications for the night, you risk inadvertently disturbing them. While the character limit is 255, try to fit into 200 characters. This way, users will be able to take in your text fast and efficiently. Reveal the essence of your channel and provide contact information. For example, you can add a bot name, link to your pricing plans, etc. Private channels are only accessible to subscribers and don’t appear in public searches. To join a private channel, you need to receive a link from the owner (administrator). A private channel is an excellent solution for companies and teams. You can also use this type of channel to write down personal notes, reflections, etc. By the way, you can make your private channel public at any moment.
from us


Telegram Unity: Всё, что вы не знали о разработке
FROM American