Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

View xiaoyunyang's full-sized avatar
🎯
Focusing

Xiaoyun Yang xiaoyunyang

🎯
Focusing
View GitHub Profile
@xiaoyunyang
xiaoyunyang / renderRoutes.js
Last active March 8, 2018 08:25
isomorphic-router-demo/iso-middleware/renderRoutes.js
// iso-middleware/renderRoutes.js
import React from 'react';
import { renderToString } from 'react-dom/server';
import { StaticRouter } from 'react-router-dom';
import { matchRoutes } from 'react-router-config';
import routes from '../shared/routes';
import HTML from '../shared/components/HTML';
import App from '../shared/App';
@xiaoyunyang
xiaoyunyang / more-testable-code.js
Last active February 3, 2018 04:57
More Testable Code
// BETTER - more testable
const incrementedVal = (val) => val + 1
function substituteVal(val, low, high) {
if(val >= high) return high
else if(val <= low) return low
else return val
}
function shouldIncrement(val, disabled) {
return val >= 0 && val < 10 && !disabled
@xiaoyunyang
xiaoyunyang / test-untestable-code.js
Last active February 3, 2018 03:21
Untestable Code Test
let vals = Array.from({length: 13}, (v,i) => i)
//> (13) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
vals = vals.map(v => v-1)
//> (13) [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
let res = vals.map(v => (
{val: v, notDisabled: valIncrementer(v, false), disabled: valIncrementer(v, true) }
))
@xiaoyunyang
xiaoyunyang / hard-to-test-code.js
Created February 3, 2018 02:31
Hard To Test Code
// BAD
function valIncrementer(val, disabled) {
var nextVal = val + 1
function firstStageSetter1() {
if(val >= 10) {
nextVal = 10 //clip it to high limit value
secondStageSetter()
}
}
@xiaoyunyang
xiaoyunyang / closure_with_recursion_bad_fix.js
Last active January 25, 2018 09:00
Closure With Recursion
var myFun2 = function() {
var num = -1
function incrementUntil(max) {
if(num >= max) return num
num++
incrementUntil(max)
}
incrementUntil(3)
return num
}
@xiaoyunyang
xiaoyunyang / closure_with_recursion_good_fix.js
Last active January 25, 2018 09:01
Closure With Recursion
var incrementUntil = function(max) {
var inc = function(num) {
if(num >= max) return num
return inc(num+1)
}
return (num) => inc(num)
}
incrementUntil(4)(1) //> 4
incrementUntil(8)(3) //> 8
@xiaoyunyang
xiaoyunyang / curry.js
Last active January 25, 2018 08:56
JavaScript Currying
var multThenAdd = num => {
return mul => add => {
return num * mul + add
}
}
var timesTwoPlusFour = (num) => multThenAdd(num)(2)(4)
timesTwoPlusFour(1) //> 6
timesTwoPlusFour(10) //> 24
@xiaoyunyang
xiaoyunyang / sample_node.js
Last active January 25, 2018 09:05
Closure Example Actual
const getInfoFromURL = path => {
const URL = require(“url”).URL;
  const myUrl = new URL(path)
  const pathname = myUrl.pathname
const getUsernameFromURL = pathname => {
  const regex = new RegExp(‘/@’);
  const username = pathname.split(regex).slice(1)[0]
  if(!username) {
return “Error in parsing: URL needs to be in format://hostname:port/@username”
@xiaoyunyang
xiaoyunyang / closure_with_recursion_myFun2.js
Last active January 25, 2018 09:06
Closure With Recursion
num = 0
var myFun2 = function() { 
var num = -1
incrementUntil(3)
return num 
}
myFun2() //> -1 ……Why?
num //> 3
@xiaoyunyang
xiaoyunyang / closure_with_recursion_myFun.js
Last active January 25, 2018 09:06
Closure With Recursion
num = 0
var myFun = function() { 
incrementUntil(3)
  return num 
}
myFun() //> 3
num //> 3