O klasie ConvertStawiając pierwsze kroki w programowaniu w C#/.NET, można odkryć kilka ciekawych właściwości, które nie zawsze występują w innych językach. Jednym z nich jest całkiem dobre rozwiązanie odwiecznego problemu w kodowaniu, czyli zamiany między różnymi typami danych: zwłaszcza do i z łańcucha znaków.
Przykładem jest chociażby metoda ToString, która zrobi nam napis z dowolnego obiektu. Są też metody w stylu int.Parse, które potrafią odczytać liczbę zapisaną jako tekst i w zgrabny sposób rozwiązują jeden z najpowszechniejszych kłopotów wszystkich początkujących programistów :) (O ile oczywiście pomyślą oni o tym, że typ bądź co bądź, podstawowy, może mieć metody tak, jak klasa). W końcu, jest też rzutowanie; może ono służyć do “przywrócenia” właściwego typu obiektu, o którym z jakichś powodów “zapomnieliśmy”, ale również do konwersji między typami podstawowymi.
W sumie więc mechanizmów tego rodzaju jest dość dużo. Co więcej, nietrudno też – zwłaszcza w rzeczywistych, a nie przykładowych kodach – natrafić na jeszcze jeden. Jest to mianowicie użycie statycznej klasy Convert, zawierającej kilka metod typu ToDouble lub ToBoolean. I wydaje się, że korzystanie właśnie z niej najbardziej się opłaca. Dlaczego?
Ano głównie ze względu na jej uniwersalność – można z niej korzystać właściwie do wszystkich konwersji wyliczonych wyżej, i nie tylko. Daje to kod czytelniejszy, w którym od razu widać, co chcieliśmy zrobić – zwłaszcza jeśli alternatywą jest pokrętne obejście w rodzaju pośredniej konwersji do stringa. Ponadto klasa ta bywa sprytniejsza niż podane wcześniej sposoby, radząc sobie chociażby z typami danych używanymi przez API dostępu do baz danych (np. SqlInt32) i przerabiając je na bardziej użyteczne wartości.
W końcu, nie da się też ukryć, że korzystanie z mniej znanej, ale za to jakże wyspecjalizowanej klasy do prostych czynności jest niewątpliwą oznaką dużego profesjonalizmu… czyż nie? ;] I to pewnie jest najważniejszy argument ‘za’ ;P
Heh, też mi się swego czasu spodobała ta klasa, do tego stopnia że sobie nawet napisałem nakładkę na boost::lexical_cast żeby mieć tak samo w c++
#include <string>
#include <boost/lexical_cast.hpp>
class __Convert
{
private:
__Convert() {}
__Convert(const __Convert&) {}
friend __Convert& ConvertInstance();
public:
template <typename T>
std::string ToString(const T t)
{
return boost::lexical_cast<std::string>(t);
}
template <typename T>
uint16_t ToUInt16(const T t)
{
return boost::lexical_cast<uint16_t>(t);
}
//itd...
};
__Convert& ConvertInstance();
static __Convert& Convert = ConvertInstance();
#endif // CONVERT_H
Zdaje się że Java też coś takiego ma :-)
Ale fakt, fajna sprawa :-)
masz błąd w znacznikach w tym artykule i w reszcie strony idzie czcionka bloku code, bo w jednym miejscu masz "" zamiast ""
</a> zamiast </code>
W calym Convert najbardziej podoba mi sie jednak mozliwosc automatycznej konwersji obiektow na proste typy danych dzieki interfejsowi IConvertible.
groshu: Poprawione.
Tak sobie myślę, że jeżeli by połączyć c++ i c# to mieli byśmy przed sobą język idealny. No i może jeszcze dodać plastyczność ruby.
Właściwie to jest dobry temat na dyskusję: Jak byście mogli stworzyć język idealny(i nie musieli byście poświęcać parunastu lat z życia na projektowanie, implementowanie, testowanie i tworzenie community) to jak by on wyglądał? Jakie cechy jakich języków byście wybrali?
Czytelność Perla, szybkość PHP, biblioteka standardowa z C, "wysokopoziomowość" i przenośność języka asemblera, poziom trudności brainfucka.
Oczywiście że Java to ma.
Jak dla mnie C#, a właściwie cały 'dot net' to materia w dużej mierze oparta na filozofii Javy, żeby nie powiedzieć że skopiowana od niej.
Oczywiście C# oferuje wiele prostych i przydatnych rozwiązań, jednak sam fundament i szkielet znamy doskonale z Javy.
Składniowo C# bardzo przypomina C++, Java zresztą też, więc trudno powiedzieć żeby pod tym względem twórcy C# zrzynali z Javy. A takie mechanizmy jak np. garbage collector istniały już w językach funkcyjnych.
99% tych wszystkich ficzerów C# czy Javy LISP miał bardzo dawno temu. Pozostałego 1% nie potrzebował.
Jaka szkoda, że składnia LISP-a została opracowana przy pomocy rzucania kotem o klawiaturę... gdyby nie to, może jego udział w ilości powstałego oprogramowania przekroczyłby 0,00045%? ;]
polymorph: Bardzo interesujące pytanie. Kto wie, może kiedyś ten temat podejmę :)
Noo widzę, że ja poszedłem w Javę, a Xion uciekł w C# ^^
Też chetnie pobawiłbym się C# gdyby nie fakt, że w Linuxie dostępne jest tylko Mono i to działajace tak-se ;)
LISPa? A komuś się tu coś z Perlem nie pomyliło? Jakbyś pokodził w np. Common Lispie przez chwilę to byś widział, że jeżeli LISP jest nieczytelny to C++ to chyba Malbolge.
Rzeczywiście, pomyliło mi się z Perlem. Charakterystyka składni LISP-a podana przez polymorpha jest o wiele lepsza :)
Ale to nie zmienia faktu, że LISP jest na tyle funkcjonalny (w sensie paradygmatu, chociaż ten drugi też pasuje), że żaden imperatywny język wygodniejszy nie będzie :)
Newline tags are added automatically.
For code, use [code][/code]. You can also insert LaTeX formulae inside [tex][/tex].
HTML tags allowed:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>