{"ScriptPreparationCode":"function getNameIF(firstName, lastName) {\r\n //cyclomatic complexity always starts from 1\r\n if (firstName \u0026\u0026 lastName) { //if operator, \u002B1\r\n return firstName \u002B \u0027 \u0027 \u002B lastName;\r\n } else if (firstName) { // \u002B1\r\n return firstName;\r\n } else if (lastName) { // \u002B1\r\n return lastName;\r\n } else if (!firstName \u0026\u0026 !lastName) { // \u002B1\r\n return \u0027stranger\u0027;\r\n }\r\n}\r\n\r\nfunction getNameOrFallback(name, fallback) {\r\n //complexity starts from 1\r\n return name || fallback; //|| operator, \u002B1\r\n //total complexity is 2\r\n}\r\n\r\nfunction getNameBetter(firstName, lastName) {\r\n //complexity starts from 1\r\n let name = \u0027\u0027;\r\n if (firstName) { //if operator, \u002B1\r\n name = firstName;\r\n }\r\n if (lastName) { // \u002B1\r\n name \u002B= \u0027 \u0027 \u002B lastName;\r\n }\r\n //even though complexity for getNameOrFallback is 2, it doesn\u0027t add up to complexity of current function\r\n return getNameOrFallback(name.trim(), \u0027stranger\u0027);\r\n //total complexity is 3\r\n}\r\n\r\nvar names = [\r\n {firstname:\u0027Alan\u0027, lastname:\u0027Tondelier\u0027},\r\n {firstname:\u0027Tedj\u0027, lastname:\u0027Ferahti\u0027},\r\n {firstname:\u0027Dudu\u0027, lastname: null},\r\n {firstname: null, lastname: null},\r\n];","TestCases":[{"Name":"Ifs","Code":"names.forEach(function(item,i) {\r\n getNameIF(item.firstname, item.lastname);\r\n});","IsDeferred":false},{"Name":"Better","Code":"names.forEach(function(item,i) {\r\n getNameBetter(item.firstname, item.lastname);\r\n});","IsDeferred":false}]}