Иван обнови решението на 16.10.2016 10:54 (преди около 9 години)
+MELTING_POINT = {
+  'water' => 0,
+  'ethanol' => -114,
+  'gold' => 1064,
+  'silver' => 961.8,
+  'copper' => 1085
+}
+
+BOILING_POINT = {
+  'water' => 100,
+  'ethanol' => 78.37,
+  'gold' => 2700,
+  'silver' => 2162,
+  'copper' => 2567
+}
+
+def convert_between_temperature_units(degree, initial_unit, target_unit)
+  case initial_unit
+  when 'C'
+    convert_from_c(degree, target_unit)
+  when 'K'
+    convert_from_k(degree, target_unit)
+  when 'F'
+    convert_from_f(degree, target_unit)
+  end
+end
+
+def melting_point_of_substance(substance, unit)
+  convert_between_temperature_units(MELTING_POINT[substance], 'C', unit)
+end
+
+def boiling_point_of_substance(substance, unit)
+  convert_between_temperature_units(BOILING_POINT[substance], 'C', unit)
+end
+
+def convert_from_c(degree, target_unit)
+  if target_unit == 'K'
+    degree + 273.15
+  elsif target_unit == 'F'
+    (degree * 9.0 / 5.0) + 32
+  else
+    degree
+  end
Погледни case
+end
+
+def convert_from_k(degree, target_unit)
+  if target_unit == 'K'
+    degree
+  elsif target_unit == 'F'
+    (degree - 273.15) * 9.0 / 5.0 + 32
+  else
+    degree - 273.15
+  end
+end
Погледни case
+
+def convert_from_f(degree, target_unit)
+  if target_unit == 'K'
+    (degree - 32) * 5.0 / 9.0 + 273.15
+  elsif target_unit == 'F'
+    degree
+  else
+    (degree - 32) * 5.0 / 9.0
+  end
+end
Погледни case
По-добра практика ли е със case да се извършват такива проверки? Ще опитам да го оправя до края на деня, ако намеря време:)

Погледни
caseПогледни
caseПогледни
case