Loading...
Tatyana avatar Tatyana 99 Точки

Поправка по Advanced JS

Колеги, някой може ли да поясни как е решил следните задания:

  • teachingSubject parameter – should set the teacher’s teaching subject. Could be null (if we have a class teacher for example).
  • _teachingSubject – a Subject (should be one of the subjects given by Subject.getSubjects()), could be null.
    Could be null ме озадачи и съм го решила по особено тъп начин.
  • addGradeToStudent(student, gradeParams) – adds a grade to a student.
    • student – a Student (only Student instances allowed)
    • gradeParams – an object with the following properties:
      • subject – A Subject (should be one of the subjects given by Subject.getSubjects()).
         If the teacher’s _teachingSubject is null, this property is obligatory because the system wouldn’t know for what subject the grade is.
         Otherwise if null, the system will use the _teachingSubject property.
         Even if _teachingSubject of the teacher isn’t null, you can still pass this parameter and a grade to the given subject will be added, not the teacher’s teaching subject.

Ще цитирам моите измишльотини, но нещо куца :) в реализацията ми:

Teacher.prototype.setTeachingSubject = function (teachingSubject) {
        if (!teachingSubject) {
          this._teachingSubject = null;
        } else if((teachingSubject instanceof schoolSystem.Subject) && schoolSystem.Subject.isValidSubject(teachingSubject)) {
          this._teachingSubject = teachingSubject;
        } else {
          throw new ArgumentException('Subject');
        }
    }

    Teacher.prototype.addGradeToStudent = function (student, gradeParams) {
        if(!(student instanceof schoolSystem.Student)) {
           throw new ArgumentException('Student');
        } 

        if (!gradeParams.subject) {
            this.gradeParams.subject = null;
        } else if(!((gradeParams.subject instanceof schoolSystem.Subject) && schoolSystem.Subject.isValidSubject(gradeParams.subject))) {
            throw new ArgumentException('Subject');
        } else if(typeof gradeParams.mark !== 'number') {
            throw new ArgumentException('Grade');
        } else if(!(gradeParams.semester instanceof schoolSystem.Semester)) {
            throw new ArgumentException('Semester');
        }

        var grade = new schoolSystem.Grade(gradeParams.mark, gradeParams.subject, gradeParams.semester);
        if(grade instanceof schoolSystem.Grade) {
            student.addGradeToStudent(grade);
        }
    }

Не знам за вас, но сега си откривам уникално тъпи грешки - първо две незатворени функции с }.

Второ вместо this.setTeachingSubject(teachingSubject); съм написала в конструктора teachingSubject.setTeachingSubject(teachingSubject);

И трето вместо функцията на студента за добавяна на оценки съм пльоснала функцията на учителя за добавяне на оценки:

student.addGradeToStudent(grade); вместо student.addGrades(grade);

И като махнах валидацията, която явно е оплескана - всичко тръгна. :) Дано поне останалите са внимавали повече от мен! Успех!

Тагове:
0
Advanced Level: Front-End 13/05/2016 16:52:59
Tatyana avatar Tatyana 99 Точки

Уффффффффф!

Докарах я задачата до работещо състояние. Прсто явно на изпит мозъкът ми е в неработещо състояние от паника! :)

Ето двете функции, които не работеха, вече работещи перфектно:

Teacher.prototype.setTeachingSubject = function (teachingSubject) {
        if (teachingSubject === null) {
          this._teachingSubject = null;
        } else if (schoolSystem.Subject.isValidSubject(teachingSubject)) {
            this._teachingSubject = teachingSubject;
        } else if (teachingSubject !== null && !schoolSystem.Subject.isValidSubject(teachingSubject)) {
          throw new ArgumentException('Subject');
        }
 }

Teacher.prototype.addGradeToStudent = function (student, gradeParams) {
        if(!(student instanceof schoolSystem.Student)) {
           throw new ArgumentException('Student');
        }

        if(typeof gradeParams.mark !== 'number') {
            throw new ArgumentException('Grade');
        }

        if (!gradeParams.subject) {
            gradeParams.subject = this.getTeachingSubject();
        }

        if (gradeParams.subject !== null && (gradeParams.subject instanceof schoolSystem.Subject)) {
            if(!schoolSystem.Subject.isValidSubject(gradeParams.subject)) {
                throw new ArgumentException('Subject');
            }
        }

        if(!(gradeParams.semester instanceof schoolSystem.Semester)) {
            throw new ArgumentException('Semester');
        }

        var grade = new schoolSystem.Grade(gradeParams.mark, gradeParams.subject, gradeParams.semester);
        student.addGrades(grade);
    }

И последно - условието изобщо не съм го разбрала - ако gradeParams.subject === null, то трябва да се вземе _ teachingSubject, но това го видях, естествено, като се прибрах в къщи.

0
DiyanTonchev92 avatar DiyanTonchev92 231 Точки

Ами ето го моето решение => School-System. Можеш да го разгледаш.

2
Tatyana avatar Tatyana 99 Точки

Хубаво решение, благодаря! 

Аз успях да го докарам до работещо приложение, но твоето решение е по-елегантно и изчистено. 

1
xenonbg avatar xenonbg 9 Точки

Колеги, откъде мога да сваля скелета и условието на изпит, защото гледам, че още няма нищо в инстанцията на курса. Благодаря предварително

0
DiyanTonchev92 avatar DiyanTonchev92 231 Точки

Свяляхме го от нещо подобно на dox.bg, няма го в системата. Аз решавах дикретно върху скелета и не го пазя - нито него, нито условието (изтрих дори папката, в която го бях свалил). Вариант е някой от колегите, ако си пази поне условието, да го качи тук и вземаш решението, което съм "постнал" горе, триеш папката models в js и 2 реда от app.js (в първия forEach) и ето ти го скелетът. Друг вариант е някой от екипа на СофтУни да се сети да го качи в курса.  

1
14/05/2016 17:39:54
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.