Re[16]: Вопрос к Vlad2: Nemerle & R#
От: vdimas Россия  
Дата: 31.03.06 20:12
Оценка:
Здравствуйте, VladD2, Вы писали:

V>>Да. Особенно в прикладном коде. Особенно там, где сложность формул преттендует на write-only... хоть какая-то проверка на "здравый смысл".


VD>Ну, привел бы пример из своего кода. И статистику сколько их таких.


Сколько их — зависит от от характера задач. Когда я писал прогу для расчета импульсных трансфоматоров — это километры расчетов всевозможных параметров по сходящимся алгоритмам. Статистика была под 99% Жаль, что на тот момент (99-й год) мне не пришло в голову использовать подобные трюки, поэтому отладка была болезненной.


А вот кусок из недавнего (прога — решетка фильтров и преобразователей спектра):

#pragma once

#include "SoundDeviceImpl.h"

namespace SoundCore {

    // inputs number - 0, outputs - 1 
    class SinGenerator : public SoundDeviceImpl<SinGenerator, 0, 1> 
    {
        typedef SoundDeviceImpl<SinGenerator, 0, 1> super;

        freq_t freq;
        phase_t df;
        phase_t currentf;

        const phase_t PI2 = phase_t(2*3.1415926535897932384626433832795);

        static DeviceDescriptorImpl<SinGenerator> descriptor;
        
    public:
        SinGenerator() : freq(500), currentf(0) {}
        
        virtual DeviceDescriptor GetDescriptor() {
            return descriptor;
        }

        freq_t GetFrequency() {
            return freq; 
        }

        void SetFrequency(freq_t value) { 
            freq = value;
            PrepareImpl();
        }

        void PrepareImpl() {
            super::PrepareImpl();
            df = PI2 * freq / GetSampleFreq();
        }

        float CalculateImpl() {
            currentf += df;
            
            if (currentf > PI2) 
                currentf -= PI2;
                
            output = Sin(_currentf);
        }

        inline static ampl_t Sin(phase_t value) {
            return ampl_t(SinFromTable(value));
        }
    };
}


Заметь, подобный код дополнительно самодокументируем.

А на самом деле речь идет о том, что в идеале, если код скомпилировался, то охота верить, что в 99% случаев он верен... это нормально для сильной статической типизации.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.