Вам нужно использовать Юникод. Вот Unicode, полученный из этого ответа :
unicode_map = {
# superscript subscript
'0' : ('\u2070', '\u2080' ),
'1' : ('\u00B9', '\u2081' ),
'2' : ('\u00B2', '\u2082' ),
'3' : ('\u00B3', '\u2083' ),
'4' : ('\u2074', '\u2084' ),
'5' : ('\u2075', '\u2085' ),
'6' : ('\u2076', '\u2086' ),
'7' : ('\u2077', '\u2087' ),
'8' : ('\u2078', '\u2088' ),
'9' : ('\u2079', '\u2089' ),
'a' : ('\u1d43', '\u2090' ),
'b' : ('\u1d47', '?' ),
'c' : ('\u1d9c', '?' ),
'd' : ('\u1d48', '?' ),
'e' : ('\u1d49', '\u2091' ),
'f' : ('\u1da0', '?' ),
'g' : ('\u1d4d', '?' ),
'h' : ('\u02b0', '\u2095' ),
'i' : ('\u2071', '\u1d62' ),
'j' : ('\u02b2', '\u2c7c' ),
'k' : ('\u1d4f', '\u2096' ),
'l' : ('\u02e1', '\u2097' ),
'm' : ('\u1d50', '\u2098' ),
'n' : ('\u207f', '\u2099' ),
'o' : ('\u1d52', '\u2092' ),
'p' : ('\u1d56', '\u209a' ),
'q' : ('?', '?' ),
'r' : ('\u02b3', '\u1d63' ),
's' : ('\u02e2', '\u209b' ),
't' : ('\u1d57', '\u209c' ),
'u' : ('\u1d58', '\u1d64' ),
'v' : ('\u1d5b', '\u1d65' ),
'w' : ('\u02b7', '?' ),
'x' : ('\u02e3', '\u2093' ),
'y' : ('\u02b8', '?' ),
'z' : ('?', '?' ),
'A' : ('\u1d2c', '?' ),
'B' : ('\u1d2e', '?' ),
'C' : ('?', '?' ),
'D' : ('\u1d30', '?' ),
'E' : ('\u1d31', '?' ),
'F' : ('?', '?' ),
'G' : ('\u1d33', '?' ),
'H' : ('\u1d34', '?' ),
'I' : ('\u1d35', '?' ),
'J' : ('\u1d36', '?' ),
'K' : ('\u1d37', '?' ),
'L' : ('\u1d38', '?' ),
'M' : ('\u1d39', '?' ),
'N' : ('\u1d3a', '?' ),
'O' : ('\u1d3c', '?' ),
'P' : ('\u1d3e', '?' ),
'Q' : ('?', '?' ),
'R' : ('\u1d3f', '?' ),
'S' : ('?', '?' ),
'T' : ('\u1d40', '?' ),
'U' : ('\u1d41', '?' ),
'V' : ('\u2c7d', '?' ),
'W' : ('\u1d42', '?' ),
'X' : ('?', '?' ),
'Y' : ('?', '?' ),
'Z' : ('?', '?' ),
'+' : ('\u207A', '\u208A' ),
'-' : ('\u207B', '\u208B' ),
'=' : ('\u207C', '\u208C' ),
'(' : ('\u207D', '\u208D' ),
')' : ('\u207E', '\u208E' ),
':alpha' : ('\u1d45', '?' ),
':beta' : ('\u1d5d', '\u1d66' ),
':gamma' : ('\u1d5e', '\u1d67' ),
':delta' : ('\u1d5f', '?' ),
':epsilon' : ('\u1d4b', '?' ),
':theta' : ('\u1dbf', '?' ),
':iota' : ('\u1da5', '?' ),
':pho' : ('?', '\u1d68' ),
':phi' : ('\u1db2', '?' ),
':psi' : ('\u1d60', '\u1d69' ),
':chi' : ('\u1d61', '\u1d6a' ),
':coffee' : ('\u2615', '\u2615' )
}
И для целей вырезать и вставить (из здесь ):
⁰ ¹ ² ³ ⁴ ⁵ ⁶ ⁷ ⁸ ⁹ ⁺ ⁻ ⁼ ⁽ ⁾ ₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ₊ ₋ ₌ ₍ ₎
ᵃ ᵇ ᶜ ᵈ ᵉ ᶠ ᵍ ʰ ⁱ ʲ ᵏ ˡ ᵐ ⁿ ᵒ ᵖ ʳ ˢ ᵗ ᵘ ᵛ ʷ ˣ ʸ ᶻ
ᴬ ᴮ ᴰ ᴱ ᴳ ᴴ ᴵ ᴶ ᴷ ᴸ ᴹ ᴺ ᴼ ᴾ ᴿ ᵀ ᵁ ⱽ ᵂ
ₐ ₑ ₕ ᵢ ⱼ ₖ ₗ ₘ ₙ ₒ ₚ ᵣ ₛ ₜ ᵤ ᵥ ₓ ᵅ ᵝ ᵞ ᵟ ᵋ ᶿ ᶥ ᶲ ᵠ ᵡ ᵦ ᵧ ᵨ ᵩ ᵪ
Как большая часть программирования, осуществляя рефакторинг навык идет с практикой и опытом. Было бы хорошо думать, что это может преподаваться, но это должно быть изучено - и существует значительная разница в объеме изучения, которое может быть выполнено в различных средах.
Для ответа на вопрос можно преподавать методы рефакторинга и хороший дизайн педагогическим способом, и это прекрасно. Но в конечном счете Вы и я, оба знают достижение определенного уровня, только через долгий трудный опыт.
Я не 100% для понимания вопроса, но я думаю, что можно послать себя Кодировать Запах, который должен быть пересмотрен. Это содержит большой пример, который Вы могли показать другому.
Вот список того, когда рефакторинг должен использоваться (список запаха кода)
Если Вы не считали его, у Martin Fowler есть превосходная книга по предмету под названием Рефакторинг: Улучшение Дизайна Существующего Кода. Он вдается в существенные подробности о том, как и почему должна быть пересмотрена определенная часть кода.
Я смущался даже упоминать это из опасения, что знание этой книги принято кем-то спрашивающим о рефакторинге, и что Вы думали бы, "Понятное дело, я имел в виду помимо книги Fowler". Но что эй, там Вы идете.:-)
Парное Программирование, кажется, лучший способ для меня объяснить это. Таким образом, поскольку мы продолжаем работать настоящие, производственный код, и мы встречаемся с некоторым кодом, который не пахнет правильным, мы занимаемся кодом, осуществляющим рефакторинг вместе. Пара действует как совесть драйвера, говорящая, чтобы сделать правильную вещь вместо быстрого исправления, и в свою очередь, они оба изучают то, на что хороший код похож в процессе.
Рефакторинг может быть искусством и просто берет практику. Чем больше Вы делаете это, тем лучше Вы достигаете его. Продолжайте изучать методы, описанные в книге Ractoring Martin Fowler, и используйте свои инструменты (Resharper для народа Visual Studio)
Вы не упоминаете тесты. 'Доказать', что рефакторинг не повреждает существующую функциональность, у Вас должны или быть существующие тесты или тесты записи прежде, чем сделать рефакторинг.
Один простой способ забеременеть рефакторинга находится тут же на имя - это точно так же, как при факторинге общей переменной из уравнения:
xy + xz
становится
x(y + z)
X был факторизован. Рефакторинг кода является тем же самым, в этом Вы находите дублирующий код или логику и факторизуете его.
Это кажется, что Ваш подход является очень хорошим. В конце процесса Вы показали, как Вы смогли раскрыть и решить много проблем. В образовательных целях могло затем быть интересно изобрести новое изменение/улучшение/устранять. Вы могли затем спросить свой mentoree, как они выполнят то изменение со старым новая кодовая база. Надо надеяться, они будут видеть, что намного легче внести новое изменение с пересмотренным кодом (или как выполнение большего количества рефакторинга было бы самым легким способом подготовиться к гипотетическому изменению).
Обучение кому-то осуществить рефакторинг, когда они не естественное, является жестким заданием. По моему опыту, Ваш лучший выбор состоит в том, чтобы сесть с ними в офисе и осуществить рефакторинг некоторый код. В то время как Вы делаете, это поддерживает на высоком уровне диалоговое окно "потока сознания". Разговор о том, что Вы видите, почему код не пахнет правильным, опции осуществить рефакторинг к, и т.д. Также необходимо удостовериться, что они делают то же самое. Самая важная вещь состоит в том, чтобы передать почему, не как, для изменения кода. Любой достойный программист может внести изменение и иметь его работа, но оно берет навык и опыт смочь указать, почему новое решение лучше, чем предыдущее.
Я вижу несколько различных способов, которыми Вы могли попытаться преподавать рефакторинг:
Учитывая подобные учебнику примеры. Оборотная сторона здесь - то, что Вы, возможно, изобрели или упрощенные примеры, где то, почему рефакторинг полезен, не обязательно сияет через, а также в других случаях.
Рефакторинг существующего кода. В этом случае Вы могли взять существующий унаследованный код, который Вы очистите, или Ваш собственный код в разработке и покажете прежде и после того, чтобы вносить свою лепту для наблюдения, насколько лучше после, с точки зрения удобочитаемости и простоты maintanence. Это может быть лучшим осуществлением, чтобы сделать, поскольку это - живой код, улучшаемый и расширенный в некоторой степени.
Это не что-то, что кто-то может взять немедленно, это занимает время, практика, усилие и терпение, поскольку некоторые рефакторинги могут быть сделаны для персонального предпочтения, а не потому что код работает оптимально так или иначе.