| Conditions | 3 |
| Paths | 25 |
| Total Lines | 56 |
| Lines | 0 |
| Ratio | 0 % |
| Changes | 5 | ||
| Bugs | 1 | Features | 1 |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
| 1 | 'use strict'; |
||
| 10 | function($scope, $interval, $timeout, savegame, state) { |
||
| 11 | $scope.state = state; |
||
| 12 | |||
| 13 | let self = this; |
||
| 14 | let playerCopy = null; |
||
| 15 | |||
| 16 | /** |
||
| 17 | * Polyfill for Object.values from the TS39 Proposal. Reflect.ownKeys |
||
| 18 | * swapped out for an equivalent using Object instead. Placing it here so |
||
| 19 | * it'll fire before it's needed in ct_matter, and at the top of this |
||
| 20 | * controller so it'll only fire once. |
||
| 21 | * |
||
| 22 | * Polyfill: https://github.com/tc39/proposal-object-values-entries |
||
| 23 | * Reflect.ownKeys Alternative: |
||
| 24 | * https://stackoverflow.com/questions/34449045/what-is-the-difference-between-reflect-ownkeysobj-and-object-keysobj |
||
| 25 | */ |
||
| 26 | const reduce = Function.bind.call(Function.call, Array.prototype.reduce); |
||
| 27 | const isEnumerable = Function.bind.call(Function.call, Object.prototype.propertyIsEnumerable); |
||
| 28 | const concat = Function.bind.call(Function.call, Array.prototype.concat); |
||
| 29 | const keys = (target) => Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target)); |
||
| 30 | // const keys = Reflect.ownKeys; |
||
| 31 | |||
| 32 | if (!Object.values) { |
||
| 33 | Object.values = function values(O) { |
||
|
|
|||
| 34 | return reduce(keys(O), (v, k) => concat(v, typeof k === 'string' && isEnumerable(O, k) ? [O[k]] : []), []); |
||
| 35 | }; |
||
| 36 | } |
||
| 37 | |||
| 38 | if (!Object.entries) { |
||
| 39 | Object.entries = function entries(O) { |
||
| 40 | return reduce(keys(O), (e, k) => concat(e, typeof k === 'string' && isEnumerable(O, k) ? [[k, O[k]]] : []), []); |
||
| 41 | }; |
||
| 42 | } |
||
| 43 | /** End Polyfill */ |
||
| 44 | |||
| 45 | self.update = function() { |
||
| 46 | // do the update in a copy |
||
| 47 | playerCopy = angular.copy(state.player); |
||
| 48 | |||
| 49 | state.update(playerCopy); |
||
| 50 | |||
| 51 | // and update all at once |
||
| 52 | state.player = playerCopy; |
||
| 53 | |||
| 54 | $timeout(self.update, 1000); |
||
| 55 | }; |
||
| 56 | |||
| 57 | self.startup = function() { |
||
| 58 | savegame.load(); |
||
| 59 | state.loading = false; |
||
| 60 | $timeout(self.update, 1000); |
||
| 61 | $interval(savegame.save, 10000); |
||
| 62 | }; |
||
| 63 | |||
| 64 | $timeout(self.startup); |
||
| 65 | } |
||
| 66 | ]); |
||
| 67 |