Coding metamaterials, digital metamaterials and programmable metamaterials