В.NET сигнатуры методов не говорят мне, если я избежал обрабатывать некоторые исключения, которые могли бы быть выданы моим кодом. Есть ли некоторый инструмент, который может предупредить меня, если говорят, что я использую HashTable, удаляют, но не обработали ArgumentNullException? Я не хочу быть удивленным во время выполнения.
И это означает, что необходимо знать код очень хорошо, иначе неконтролируемые исключения могут быть более трудны работать с?
Ключ заключается в использовании блокировки объекта в списке массивов только тогда, когда это действительно необходимо.
Хорошей идеей было бы объединение списка массивов подклассов и обеспечение синхронизации в одиночных процессах чтения + записи + удаления.
Это обеспечит тонкую детализацию с блокировкой, позволяя потокам проходить через массив перечислять одновременно защищая семантику списка массивов.
-121--4435166-Нет языковой поддержки для того, что вы пытаетесь сделать. Мы написали таможенное дополнение к VS, чтобы убедиться, что все точки входа для нашего API пробовали ловли для вырубки. Однако я никогда не видел значения в языках, которые заставили вас охватить все возможные объявленные случаи исключения, так как вы все еще должны написать какой-то код, чтобы сделать что-то значимое с ошибкой. Большинство людей просто смотрят на то, что жалобщик жалуется на написание обработчика и скрывают, что может быть полезной ошибкой в каком-то бесполезном коде. В некоторых случаях лучше потерпеть неудачу и знать, что есть проблема.
-121--3977987-На самом деле, обработка неожиданных исключений путем прекращения программы является лучшим способом справиться с этой ситуацией, так как, в общем, состояние программы не определено, когда происходит что-то неожиданное. Если вы регистрируете все исключения и имеете достойный набор приемочных испытаний, вы можете устранить проблемы, которые возникают из-за непредвиденных исключений из-за выполнения программы.
Защитное программирование путем проверки входных данных методов, модульных тестов классов и понимания рамки сделает большинство ожидаемых исключений.
) Для приложений Windows:
AppDomain currentDomain = default(AppDomain);
currentDomain = AppDomain.CurrentDomain;
// Handler for unhandled exceptions.
currentDomain.UnhandledException += UnhandledExceptionHandler;
// Handler for exceptions in threads behind forms.
Application.ThreadException += ThreadExceptionHandler;
public static void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e)
{
}
public static void ThreadExceptionHandler(object sender, Threading.ThreadExceptionEventArgs e)
{
}
let x,(/)=System.Console.ReadLine(),String.replicate
let t,p=(int x.[0]-60)%7*5,int x.[1]%2
let g s i=printf"%s"(i/((99/s).[t+4*p..t+int x.[2..]*5+5*p]+"\n"))
g"| ### ### | ### ### ### "5
g"| "3
g"|____"1
Я использовал модули 2 для обнаружения пробела или фунта. '' - 32% 2 = 0 "#" - 35% 2 = 1 " и поскольку мои условные возвращенные нули для false, я просто умножил результат модулей.
Используйте оператор < |, чтобы сбрить один символ пробела. Используется перегрузка оператора для сохранения другого символа.
исходный
let piano_long (input:string) =
let sharp, flat = if input.[1] = '#' then 4, 1 else 0, 0
let note = (int input.[0] - 60) % 7
let num = int (input.Substring 2)
let start = note * 5 + sharp
let stop = num * 5 + 1 + flat
let top = "| ### ### | ### ### ### | ### ### | ### ### ### |"
let middle = "| | | | | | | | | | | | | | |"
let bottom = "|____|____|____|____|____|____|____|____|____|____|____|____|____|____|"
let mutable piano = ""
for i in 1..5 do
piano <- piano + top.Substring(start, stop) + "\n"
for i in 1..3 do
piano <- piano + middle.Substring(start, stop) + "\n"
piano <- piano + bottom.Substring(start, stop)
printf "%s\n\n" piano
-121--778778- Ключ заключается в том, чтобы использовать блокировку объекта в списке массивов только тогда, когда это действительно необходимо.
Хорошей идеей было бы объединение списка массивов подклассов и обеспечение синхронизации в одиночных процессах чтения + записи + удаления.
Это обеспечит тонкую детализацию с блокировкой, позволяя потокам проходить через массив перечислять одновременно защищая семантику списка массивов.
-121--4435166-Нет языковой поддержки для того, что вы пытаетесь сделать. Мы написали таможенное дополнение к VS, чтобы убедиться, что все точки входа для нашего API пробовали ловли для вырубки. Однако я никогда не видел значения в языках, которые заставили вас охватить все возможные объявленные случаи исключения, так как вы все еще должны написать какой-то код, чтобы сделать что-то значимое с ошибкой. Большинство людей просто смотрят на то, что жалобщик жалуется на написание обработчика и скрывают, что может быть полезной ошибкой в каком-то бесполезном коде. В некоторых случаях лучше потерпеть неудачу и знать, что есть проблема.
Вы должны добавить обработчик исключений верхнего уровня для своего приложения и написать модульный, функциональный и интеграционный тесты для вашего приложения, которые будут проверять все возможные варианты использования. Это поможет вам устранить почти все непроверенные исключения.
Также старайтесь не ловить исключения, а устранять причину. (т.е. не перехватить ArgumentNullException
, но не передать null