Advertisement
Guest User

Untitled

a guest
Jun 24th, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.32 KB | None | 0 0
  1. // Bu bir satırlık yorumdur. Bir satırlık yorum böyle görünür
  2.  
  3. /*
  4. ÇOK SATIRLI YORUM
  5. Rust Mozilla Research tarafından geliştirilmesi desteklenen bir dildir.
  6. Alt Seviye dil kontrolleri üzerine üst seviyenin kolaylığını ve veri
  7. güvenliğini ekler
  8. */
  9.  
  10. /// Dökümantasyon yorumu böyle yazılr. Markdown notasyonları desteklenir.
  11. /// # Örnekler Başlığı
  12. /// ```
  13. /// fn main() {
  14. /// println!("Hello world!");
  15. /// }
  16. /// ```
  17.  
  18. //////////////////////
  19. // Dilin Temelleri //
  20. ////////////////////
  21.  
  22. // Fonksiyonlar
  23. // i32: 32 bit işaretli (+ / -) tamsayı
  24. // i8, i16, i64 de var
  25. // u işaretsizler (u8, u16, u32, u64)
  26. // Deüişken büyüklükler için isize, usize
  27. // Tür kendiliğinden algınalabilir
  28. // Deklare etmek istersek değişken adı : boşluk tür şeklinde
  29. // Örnek: let tamsayi: i32 = 35;
  30. // Örnek2: let tamsayi2 = 40;
  31.  
  32. fn ikisini_topla(x: i32, y: i32) -> i32 {
  33. // Ruby, perl gibi son satır özellikle belirtmeksizin return edilir.
  34. // return eden fonksonlarda -> bulunur ve onu tür bilgisi izler
  35. x + y
  36. }
  37.  
  38. // Her Rust programı muhakkak bir main fonksiyonu içerir
  39. fn main() {
  40. // Sayılar üzerine //
  41.  
  42. // Immutable(Değiştirilemez) Binding (Bağlama/Bağlantı) oluşturma
  43. let x: i32 = 214;
  44.  
  45. // float ve integer için son ek biçiminde tanımlama
  46. let y = 42i32;
  47. let f = 3.14f64;
  48.  
  49. // Tür çıkarımı
  50. // Çoğunlukla rust derleyicisi bir değişkenin türünü belirleyebilir.
  51. // Yani görülebilir biçimde açık bir belirtim şekline mecbur değilsiniz.
  52. // ama öğretici boyunca açık belirtme şekli daha sık kullanılacak.
  53.  
  54. let implicit_x = 1453;
  55.  
  56. let implicit_f = 1.37;
  57.  
  58. println!("{} ve {}", implicit_x, implicit_f);
  59.  
  60. // Aritmetik bir işlemi değişkene Bağlama
  61.  
  62. println!("İkisini topla fonksiyonunun döndüğü değer: {}", ikisini_topla(5, 4));
  63.  
  64. let sum = x + y + 19;
  65.  
  66. println!("sum değişkeninin değeri: {}", sum);
  67.  
  68. // Değiştirlebilir Binding
  69. let mut mutable = 1;
  70. mutable += 2;
  71.  
  72. println!("mutable değişkeninin değeri: {}", mutable);
  73.  
  74. // Karakter Dizileri yani String //
  75.  
  76. // Birebir string binding oluşturma
  77. let xs: &str = "merhaba genç!";
  78.  
  79. // Yazdırma
  80. println!("Float değerimiz: {}, String Değerimiz: {}", f, xs);
  81.  
  82. // Heap üzerinde bellek alanı ayrılmış string
  83. let s: String = "merhaba dünya.".to_string();
  84.  
  85. // Bir string dilimi(string slice) string değişkeninin değiştirilemez görüntüsüdür.
  86. // Aşağıdaki temel olarak bir değiştirilemez ve stringi işaret eden işaretçi grubudur,
  87. // yani aslında string içeriğini barındırmaz, sabit olarak ayrılmış ya da bir nesne taşıyan
  88. // string önbelliğinnin başlangıcından bitimine kadar kısmına işaret eden işaretçidir.
  89. let s_slice: &str = &s;
  90.  
  91. println!("{} {}", s, s_slice);
  92.  
  93. // Vektörler ve Diziler //
  94.  
  95. // Sabit Büyüklükte Bir Dizi
  96. let four_ints: [i32; 4] = [1, 2, 3, 4];
  97. println!("İlk dizimiz: {:?}", four_ints);
  98.  
  99. // Değiştirlebilir büyüklükte bir dizi yani Vektör
  100. let mut vector: Vec<i32> = vec![1, 2, 3, 4];
  101. vector.push(5);
  102.  
  103. println!("Öge eklenmiş vektörümüz: {:?}", vector);
  104.  
  105. // Bir dilim (slice) bir vektör ya da dizinin değiştirilemez görüntüsüdür.
  106. // String dilimlerine benze bir mantıktadır.
  107. // Belli bir aralığı almak için: let dizi_dilim = &dizi[1..4] gibi
  108. let slice: &[i32] = &vector;
  109.  
  110. // bir şeyi debug biçimlendirmesinde ekrana yazdırmak için: {:?}
  111. println!("Slice: {:?}", slice);
  112.  
  113. // Tuple Değiken Tipi //
  114.  
  115. // Bir tuple sabit büyüklükteki bir dizidir anca farklı türde değerler içerebilir.
  116.  
  117. let tuple: (i32, &str, f64) = (1881, "samsun", 3.14);
  118.  
  119. // Tanımlama şablonu örneği
  120. let (a, b, c) = tuple;
  121.  
  122. println!("{} {} {}", a, b, c);
  123.  
  124. // İndeks
  125. println!("tuple değişkeninin ilk itemi: {}", tuple.0);
  126. println!("tuple değişkeninin ikinci itemi: {}", tuple.1);
  127. println!("tuple değişkeninin içüncü itemi: {}", tuple.2);
  128.  
  129. /////////////
  130. // Türler //
  131. ////////////
  132.  
  133. // Struct ve Evet! Rust dilinde class yok :O
  134. // Koordinat bizim oluşturduğumuz bir struct
  135. // Tanımlamalar main fonksiyonu bitiminde başlıyor
  136.  
  137. let origin: Koordinat = Koordinat { x: 0, y: 0};
  138.  
  139. println!("origin değişkeni: x {} noktasında ve y {} noktasında.", origin.x, origin.y);
  140.  
  141. let recipe: Cikolata = Cikolata(12.4, 3.14);
  142.  
  143. println!("Çikolata: Kakao miktar: {} gr & Süt miktar {} gr", recipe.0, recipe.1);
  144.  
  145. // Enumaratör
  146. // Alıştığımız C usulü
  147.  
  148. enum Yonler {
  149. Sol,
  150. Sag,
  151. Yukari,
  152. Asagi,
  153. }
  154.  
  155. let _up = Yonler::Yukari; // bir değişkeni tanımlar kullanmazsak başında _ olmalı yoksa derlenmez
  156. let _down = Yonler::Asagi;
  157. let _left = Yonler::Sol;
  158. let _right = Yonler::Sag;
  159.  
  160. //Alan ile Enumaratör
  161.  
  162. enum OptionalInteger {
  163. BirInteger(i32),
  164. Nothing,
  165. }
  166.  
  167. let _four = OptionalInteger::BirInteger(4);
  168. let _nothing = OptionalInteger::Nothing;
  169.  
  170. // ve Generics //
  171.  
  172. let bir_foo = Foo { bar: 1923 };
  173.  
  174. println!("bir_foo değişkenindeki bar değeri: {}", bir_foo.get_bar());
  175.  
  176. let baska_bir_foo = Foo { bar: 1919 };
  177.  
  178. println!("{:?}", baska_bir_foo.frobnicate());
  179.  
  180. // Detaylı Olarak Şablon Eşleşmesi (Pattern Matching)
  181. let bar = FooBar {x: 23, y: OptionalI32::AnI32(1920) };
  182.  
  183. match bar {
  184. FooBar { x: 0, y: OptionalI32::AnI32(0) } =>
  185. println!("Sayılar 0!"),
  186.  
  187. FooBar { x: n, y: OptionalI32::AnI32(m) } if n == m =>
  188. println!("Sayılar aynı"),
  189. FooBar { x: n, y: OptionalI32::AnI32(m) } =>
  190. println!("Farklı sayılar: {} {}", n, m),
  191. FooBar { x: _, y: OptionalI32::Nothing } =>
  192. println!("İkinci sayı Nothing!"),
  193. }
  194.  
  195. // Akış Denetimi //
  196.  
  197. // Döngü ve iterasyon
  198. let dizi = [3, 5, 8];
  199. for i in dizi.iter() {
  200. println!("{}", i);
  201. }
  202.  
  203. // Range
  204. for i in 0..40 {
  205. print!("{}", i);
  206. }
  207.  
  208. println!("\n");
  209.  
  210. // if / else
  211. if 5 > 0 {
  212. println!("Mantıklı");
  213. }else {
  214. println!("Yok artık!");
  215. }
  216.  
  217. let deger = 1914;
  218.  
  219. // bir ifadeymişçesine if
  220. let degisken = if deger == 1914 {"birinci"} else {"ikinci"};
  221. println!("{}: {}", degisken, deger);
  222.  
  223. // while döngüsü
  224. let mut sayac = 0;
  225.  
  226. while sayac < 10 {
  227. println!("{}", sayac);
  228. sayac += 1;
  229. }
  230.  
  231. // sonsuz döngü
  232. let enfazla = 10;
  233. let mut digersayac = 0;
  234.  
  235. loop {
  236. println!("Biri break ile durdurmadıkça döner durur!");
  237.  
  238. if digersayac == enfazla {
  239. break;
  240. }
  241.  
  242. digersayac += 1;
  243. }
  244.  
  245. /////////////////////////////////////////////
  246. // Bellek Güvenliği & İşaretçiler(pointer) //
  247. ////////////////////////////////////////////
  248.  
  249. // Sahiplenme: Bir işaretçiyi(pointer) bir seferde sadece BIR TEK nesne sahiplenir
  250. let mut benim: Box<i32> = Box::new(1914);
  251. *benim = 1916; // bu bir dereference örneğidir
  252. // Burada, `simdi_benim` `benim` değişkeninin sahipliğini alır. Başka bir ifadeyle, `mine` taşındı.
  253. let mut simdi_benim = benim;
  254. *simdi_benim += 3;
  255.  
  256. println!("{}", simdi_benim); // 1919 dönecek
  257.  
  258. // println!("{}", mine); // bu kesinlikle derlenmez çünkü artık işaretçiye `simdi_benim` sahip
  259. // Reference(referans :) ) başka bir dataya referans eden değiştirilemez bir işaretçidir
  260. // Bir referans değer aldığında bir bunu ödünç alındı(barrowed) olarak adlandırırız
  261. // Değer değiştirilemez biçimde ödünç alındığında Değiştirilemez ve Taşınamaz
  262. // Bir ödünç alma bulunduğu scope sona erdiğinde sona erer
  263.  
  264. let mut _oylebirdegisken = 2017;
  265. _oylebirdegisken = 2013;
  266. let referans_degisken: &i32 = &_oylebirdegisken;
  267.  
  268. println!("{}", _oylebirdegisken); // İlkel tiplerde ayrı bir referans pointer olmadığından oylebirdegisken kullanılabilir
  269.  
  270. println!("{}", *referans_degisken);
  271.  
  272. // Artık oylebirdegisken = 15; // derlenmez çünkü oylebirdegisken ödünç alındı
  273. // *referans_degisken = 666; // bu da derlenmeyecektir çünkü referans_değişken değiştirlemez bir referans
  274.  
  275. // Değiştirilebilir Referans
  276. // Değer değiştirilebilir olarak ödünç alındığında (borrowed) tümüyle erişilmezdir.
  277. let mut oylebirdegisken2 = 1945;
  278. let referans_degisken2: &mut i32 = &mut oylebirdegisken2;
  279.  
  280. *referans_degisken2 += 2; // '*' işareti ile değiştirilebilir olarak ödünç alınmış oylebirdegisken2 işaret edilir
  281.  
  282. println!("{}", *referans_degisken2); // 1947, // eğer yerinde oylebirdegisken2 olursa derlenmeyecek
  283.  
  284. // referans_degisken2 &mut i32 tipinde, öyle bir i32 yi referans gösterir değeri değil
  285. // oylebirdegisken2 = 2023; // derlenmez çünkü oylebirdegisken2 ödünç alındı.
  286.  
  287.  
  288. }
  289.  
  290. // Aynı enum farklı adla public erişiminde BURADA (OptionalInteger)
  291. pub enum OptionalI32 {
  292. AnI32(i32),
  293. Nothing,
  294. }
  295.  
  296. // STRUCT TANIMLARI BURADA //
  297. struct Koordinat {
  298. x: i32,
  299. y: i32,
  300. }
  301.  
  302. struct Cikolata(f64, f64); // Bir tuple struct örneği
  303.  
  304. struct Foo<T> {
  305. bar: T,
  306. }
  307.  
  308. // Method
  309. impl<T> Foo<T> {
  310. // Methodlar belirtilmesi gereken bir self parametresi alırlar.
  311. // mesela bir getter gibi düşünelim
  312. fn get_bar(self) -> T {
  313. self.bar
  314. }
  315. }
  316.  
  317. // Trait | Diğer dillerdeki Interface gibi düşünebilirsiniz
  318. trait Frobnicate<T> {
  319. fn frobnicate(self) -> Option<T>;
  320. }
  321.  
  322. impl<T> Frobnicate<T> for Foo<T> {
  323. fn frobnicate(self) -> Option<T> {
  324. Some(self.bar)
  325. }
  326. }
  327.  
  328. // Şablon Eşleşmesi Yeni bir Struct
  329. struct FooBar {
  330. x: i32,
  331. y: OptionalI32,
  332. }
  333.  
  334.  
  335. // STRUCT TANIMLARI BURADA BİTTİ //
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement