Почему в структурном программировании нет мертвого кода?

Одним из достоинств структурного программирования является отсутствие мертвого кода. Никак не могу понять: почему его не может там возникнуть? Особенно на этапе модификации.
  • Вопрос задан
  • 1139 просмотров
Пригласить эксперта
Ответы на вопрос 3
hack504
@hack504
А кто-нибудь может дать четкое определение "Структурного программирования" и "мертвого кода"? Это же ведь просто размышления на тему, так сказать абстрактное видение программирования в целом, а вот уже как это материализовалось в конкретных языках программирования и на сколько полно - не важно, так как это не относится к проблемам самого подхода. Наоборот, это проблема самого человека, который постоянно ищет золотой грааль, который решит все его проблемы, и всегда находится мессия указывающий путь к нему.
--------
И вообще зачем лезть в теорию программирования? Чтобы разработать свой ЯП? На прикладном уровне эта инфа не более чем беллетристика.
Ответ написан
@ArgosX
Ну обычно подход "сверху вниз". И такой подход диктует программисту проходить весь код целиком удаляя мертвый код. Скажем так - чаще приходится перебирать код и как правило мусора намного меньше
Ответ написан
@vvmtutby
Одним из достоинств структурного программирования является отсутствие мертвого кода.
Никак не могу понять: почему его не может там возникнуть?


Верно для "твёрдого" с.п. без скрытых форм GOTO : BREAK , EXIT, RETURN из "середины" функций

С другой стороны: могут "иметь место" ни разу не вызываемые функции и т.п.

Я бы слово "отсутствие" заменил бы на "помогает избежать"

P.S.

@Rsa97 say:
Да ладно...
if (false) {
... сюда никогда не попадём
}

for (i = 0; i < 0; i++) {
... и сюда тоже
}



1) См. выше
могут "иметь место" / "помогает избежать"

2) Не затруднит ли "for (i = 0; i < 0; i++)" переписать на ADA / Modula-3 ?
( мысленный эксперимент )

3) На тему "if (false)"

"Твёрдое структурное программирование" подразумевает доказательное программирование ( ADA SPARK)

См. образец:

https://ironsides.martincarlisle.com/

process_dns_request.adb

Counter := 1;
         Additional_Count := 0;
         while Counter <= NumFound and Additional_Count < DNS_Types.Unsigned_Short'Last-DNS_Types.Unsigned_Short(
               2*Rr_Type.MaxNumRecords) loop
            --# assert Counter >= 1 and Counter<=NumFound and
            --#    (for all Z in RR_Type.ReturnedRecordsIndexType =>
            --#       (Qname_Locations(Z) >= 0 and Qname_Locations(Z) < 16384)) and
            --#    Qname_Location >=0 and Qname_Location <= 16383 and
            --#    Answer_Count >=0 and Answer_Count <= 65535 and
            --#    Additional_Count >= 0 and
            --#    Additional_Count < DNS_Types.Unsigned_Short'Last-DNS_Types.Unsigned_Short(
            --#    2*Rr_Type.MaxNumRecords) and
            --#    NumFound >= 0 and NumFound <= rr_type.MaxNumRecords and
            --#    Integer(Output_Bytes) >= DNS_Types.Header_Bits/8+1 and
            --#    Integer(Output_Bytes) <= DNS_Types.Packet_Size;
            Start_Byte := DNS_Types.Packet_Bytes_Range(Integer(Output_Bytes) -
               DNS_Types.Header_Bits/8);
            Create_Response_A(
               Start_Byte     => Start_Byte,
               Domainname     => NS_Replies(Counter).nameserver,
               Qname_Location => Qname_Locations(Counter),
               Output_Packet  => Output_Packet,
               Answer_Count   => Additional_Count,
               Output_Bytes   => Output_Bytes);
            Start_Byte := DNS_Types.Packet_Bytes_Range(Integer(Output_Bytes) -
               DNS_Types.Header_Bits/8);
            Create_Response_AAAA(
               Start_Byte     => Start_Byte,
               Domainname     => NS_Replies(Counter).nameserver,
               Qname_Location => Qname_Locations(Counter),
               Output_Packet  => Output_Packet,
               Answer_Count   => Additional_Count,
               Output_Bytes   => Output_Bytes);
            Counter := Counter + 1;
         end loop;
      else
         Protected_SPARK_IO_05.SPARK_IO_PO.Put_Line(Protected_SPARK_IO_05.SPARK_IO_PO.Standard_Output,"bad query type", 0);
--            ada.text_io.put_line("qc: " & dns_types.Query_Type'image(Query_Type));
         Create_Response_Error(
            Input_Bytes   => Input_Bytes,
            Output_Packet => Output_Packet,
            Output_Bytes  => Output_Bytes);
      end if;

      -- this assert helps with the VCG Heap overflow
      --# assert
      --#    Answer_Count >=0 and Answer_Count <= 65535 and
      --#    Qname_Location >=0 and Qname_Location < 16384 and
      --#    Additional_Count >= 0 and
      --#    NumFound >= 0 and NumFound <= rr_type.MaxNumRecords and
      --#    Integer(Output_Bytes) >= DNS_Types.Header_Bits/8+1 and
      --#    Integer(Output_Bytes) <= DNS_Types.Packet_Size;

      DNSSEC := False;
      Max_Transmit := DNS_Types.UDP_Max_Size;
      -- Handle EDNS additional OPT record here!
      if Input_Packet.Header.QDCount = 1 and
         Input_Packet.Header.ARCount = 1 and
         Additional_Count < DNS_Types.Unsigned_Short'Last then
         Start_Byte := DNS_Types.Packet_Bytes_Range(Integer(Output_Bytes) -
            DNS_Types.Header_Bits/8);
         Create_Response_EDNS(
            Input_Packet     => Input_Packet,
            Input_Bytes      => Input_Bytes,
            Query_End_Byte   => Query_End_Byte,
            Start_Byte       => Start_Byte,
            Output_Packet    => Output_Packet,
            Output_Bytes     => Output_Bytes,
            Additional_Count => Additional_Count,
            DNSSEC           => DNSSEC,
            Max_Transmit     => Max_Transmit);
      elsif Input_Packet.Header.QDCount /= 1 then
         Protected_SPARK_IO_05.SPARK_IO_PO.Put_Line(Protected_SPARK_IO_05.SPARK_IO_PO.Standard_Output,"query count > 1", 0);
      elsif Input_Packet.Header.ARCount > 1 then
         Protected_SPARK_IO_05.SPARK_IO_PO.Put_Line(Protected_SPARK_IO_05.SPARK_IO_PO.Standard_Output,"ar count > 1", 0);
      end if;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы