Цикл-коммутатордың кезектілігі - Loop-switch sequence

A цикл-коммутатордың кезектілігі[1] (деп те аталады жағдай парадигмасы[2] немесе қарсыДафтың құрылғысы ) бағдарламалау болып табылады үлгіге қарсы мұнда цикл-цикл ретінде қадамдардың нақты жиынтығы жүзеге асырылады. Цикл-коммутатор тізбегі нақты туынды болып табылады спагетти коды.

Бұл міндетті емес үлгіге қарсы пайдалану үшін ауысу мәлімдемесі цикл ішінде - бұл белгілі қадамдар дәйектілігін модельдеу үшін қолданылған кезде ғана дұрыс емес деп саналады. Ауыстырғышты цикл ішінде дұрыс қолданудың ең көп таралған мысалы - an басқарудың инверсиясы сияқты іс-шаралар өңдеушісі. Іс-шараларды өңдеуші циклдарда оқиғалар тізбегі компиляция кезінде белгілі емес, сондықтан қайталанатын қосқыш қажет және дұрыс болады (қараңыз) оқиғаларға негізделген бағдарламалау, оқиға циклі және оқиғаларға негізделген ақырғы күй машинасы ).

Бұл өнімділікке қарсы үлгі емес, дегенмен, егер ол жетіспейтіндіктен, нәтижесіз жазалауға әкелуі мүмкін тіркелмеген цикл. Керісінше, бұл анықтыққа қарсы үлгі, өйткені кез-келген тривиальды емес мысалда кодтың ниеті мен нақты функциясын түсіну неғұрлым қарапайым қайта өңделген шешімге қарағанда әлдеқайда қиын.

Мысал

Іс-шараға негізделген шешім а тыңдаушы интерфейсі:

Жол кілт = нөл;Жол мәні = нөл;Тізім<Жол> парам = нөл;int баған = 0;қоғамдық жарамсыз addToken(жетон) {    // кілтті, мәнді, содан кейін үш параметрді талдау     қосқыш (баған) {        іс 0:            парам = жаңа Байланысты тізім<Жол>();            кілт = жетон;            үзіліс;        іс 1:            мәні = жетон;            үзіліс;        әдепкі:            парам.қосу(жетон);            үзіліс;    }    егер (++баған >= 5) {        баған = 0;        completeRow(кілт, мәні, парам);    }}

Бірақ тыңдаушысыз ол антистательдің мысалы болады:

// кілтті, мәнді, содан кейін үш параметрді талдау Жол кілт = нөл;Жол мәні = нөл;Тізім<Жол> парам = жаңа Байланысты тізім<Жол>();үшін (int мен = 0; мен < 5; мен++) {    қосқыш (мен) {        іс 0:            кілт = ағын.талдау();            үзіліс;        іс 1:            мәні = ағын.талдау();            үзіліс;        әдепкі:            парам.қосу(ағын.талдау());            үзіліс;    }}

Міне, қайта өңделген шешім:

// кілт пен мәнді талдауЖол кілт = ағын.талдау();Жол мәні = ағын.талдау();// 3 параметрді талдауТізім<Жол> парам = жаңа Байланысты тізім<Жол>();үшін (int мен = 0; мен < 3; мен++) {    парам.қосу(ағын.талдау());}

Әдебиеттер тізімі

  1. ^ «Ілмек-коммутатор тізбектері». ДЕҢГЕЙДІҢ КОДЫ. Алынған 11 сәуір 2016.
  2. ^ FOR-CASE парадигмасы және Ілмектерде қосылды кезінде Күнделікті WTF