İçerik listeleme veya veri sorgulama işlemi sonucunda elde edilen verilerin çok fazla olduğu durumlarda tüm verinin kullanıcıya gösterilmesi hem maliyetli hem de kafa karıştırıcı bir yöntemdir. Bu gibi durumlarda verilerin kullanıcılara sıralı parçalar halinde sunulması gerekmektedir. Sıralı parçalı gösterim günümüzde web ve mobil ortamlarda iki şekilde yapılmaktadır.
-
Pagination yöntemi
-
Infinite Scroll yöntemi
Kaynak: http://www.bayramucuncu.com/pagination-ve-infinite-scroll-tercihi/
1-edx "dünyanın en iyi üniversitelerinden bedava dersler" sloganıyla ortaya çıkmış, üniversite düzeyinde derslerin paylaşıldığı oldukça kullanışlı bir site. zamanında biyoloji ve italyanca dersleri çok işime yaradı.
derslerin çoğu ücretsiz olsa da, harvard gibi üniversitelerin bazı dersleri ücretli olabiliyor.
2-edx'ten daha pratik ve bilindik bir site arayanlar için: http://ed.ted.com/
izlediğiniz videolardan sonra konuyu pekiştirmek için küçük testler çözmenize imkan tanıyor. onlarca dille birlikte türkçe altyazı imkanı da tanıması ayrıca güzel.
devamını oku…
"mathway" mükemmel bir problem çözücü.. matematikle uğraşanların başucunda tutacağı türden.
Null-conditional operators : Herhangi bir class veya propertyleri null ise bunlara erişmek için null kontrolü yapmadan çok daha basit yolla değerleri çekebiliriz.
int? first = (customers != null) ? customers[0].Orders.Count() : null;
Yukarıdaki kodun yerine aşağıdakini kullanabiliriz.
int? first = customers?[0].Orders?.Count();
Böylece eski compiler’dan kurtulunca artık neler yapabileceğimizi gördük. Daha birçok yeniliğin kapıda olduğunu belirtir bloğumu takip etmenizi tavsiye ederim.
Detaylı Pdf: http://www.borakasmer.com/projects/ctp3-csharp-features.pdf
Kaynak : http://www.borakasmer.com/net-compiler-platform-roslyn/
Exception filters : Yakalanan hatalara filitre konabilmektedir. Böylece belirtilen catch bloğunda sadece tanımlanan exception filtresine uygun exceptionlar yakalanır. Eğer hiçbir filitreye uymayan exception var ise stacktrace kaybolmadan işleme devam edilir. Aşağıdaki örnekte de görüldüğü gibi number değeri 50’den küçük olduğu için en sondaki catch’e düşmekte ve 1 değerini döndürmektedir. Eğer number 50’den büyük olur ise ilk cathc’e düşmekte ve geriye number’ın kendi değeri döndürülmektedir.
public class Point(int x, int y)
{
string number = "45";
public int GetNumber()
{
try
{
int.TryParse(number, out var x);
throw new Exception();
return x;
}
catch (Exception e) if (int.Parse(number) > 50)
{
return number;
}
catch (Exception e2)
{
return 1;
}
}
}
Declaration expressions : Expressionlar içerisinde artık tanımlama yapılabilmektedir. Ençok kullanıldığı yerler out parametreleridir.
int.TryParse(number, out var x);
public class Customer
{
public char[] Strings { get { return "a12b3d".ToCharArray(); } }
public List<int> GetResult()
{
var result = (from s in Strings select int.TryParse(s.ToString(), out int i) ? i : -1).ToList();
return result;
}
}
Customer newCustomer = new Customer();
foreach (int num in newCustomer.GetResult())
{
WriteLine(num);
}
Kaynak: http://www.borakasmer.com/net-compiler-platform-roslyn/
Extension methods : Extension methodlar projeye using ile eklenebilmektedir.
using System.Linq.Enumerable;
class Program
{
static void Main(string[] args)
{
var range = Range(5, 17);
var odd = Where(range, i => i % 2 == 1);
foreach (int num in odd)
{
WriteLine(num);
}
ReadLine();
}
}
Using static : Static class’lar using olarak projeye eklenebilmektedir.
using System.Console; using System.Math;
class Program
{
static void Main()
{
WriteLine(Sqrt(3*3 + 4*4));
}
}
Parameters on classes and structs : Classlar oluşturulurken constructer olmadan parametre alması sağlanmıştır.
public class RealCustomer(string firstName, string lastName)
{
public string FirstName { get; } = firstName;
public string LastName { get; } = lastName;
}
RealCustomer relCustomer = new RealCustomer("Yakup", "KALEBAŞI");
WriteLine(relCustomer.FirstName + " " + relCustomer.LastName);
<div id="divLoading" style="display:none; z-index: 10002;">
<div class="jtable-busy-panel-background" style="left:0; top:0; margin:0; width: 100%; height: 100%;"></div>
<div style="position: fixed; top: 45%; left: 45%;">
<i class="fa fa-refresh fa-spin fa-5x fa-fw margin-bottom"></i>
</div>
</div>
$(document).ajaxStart(function () {
onBegin();
});
$(document).ajaxStop(function (event, request, settings) {
onComplete();
});
function onBegin() {
$("#divLoading").show();
}
function onComplete() {
$("#divLoading").hide();
}
var oHttp : variant;
//http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/tsleft.web+WinBatch/OLE~COM~ADO~CDO~ADSI~LDAP+Set~Proxy~Server~and~Port.txt
//Instantiate a WinHttpRequest objec
oHttp:=CreateOleObject('WinHttp.WinHttpRequest.5.1');
//Initialize an HTTP request.
oHttp.open('POST', Url, false);
oHttp.setRequestHeader('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)');
{
//HttpRequest SetCredentials flags.
HTTPREQUEST_PROXYSETTING_DEFAULT = 0;
HTTPREQUEST_PROXYSETTING_PRECONFIG = 0;
HTTPREQUEST_PROXYSETTING_DIRECT = 1;
HTTPREQUEST_PROXYSETTING_PROXY = 2;
}
//Use proxy_server
oHttp.setProxy(2, 'xxyydd:80','');
oHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
//Send the HTTP request.
oHttp.send(oleVar);
showmessage(oHttp.responsetext);
#jtable-create-form {
display: block;
width: 450px;
-moz-column-gap:40px;
/* Firefox */
-webkit-column-gap:40px;
/* Safari and Chrome */
column-gap:40px;
-moz-column-count:2;
/* Firefox */
-webkit-column-count:2;
/* Safari and Chrome */
column-count:2;
}
#jtable-create-form div.jtable-input-field-container {
border-bottom: none;
}
#jtable-edit-form {
display: block;
width: 450px;
-moz-column-gap:40px;
/* Firefox */
-webkit-column-gap:40px;
/* Safari and Chrome */
column-gap:40px;
-moz-column-count:2;
/* Firefox */
-webkit-column-count:2;
/* Safari and Chrome */
column-count:2;
}
#jtable-edit-form div.jtable-input-field-container {
border-bottom: none;
}
Solid Prensipleri
1- (S)ingle Responsibility
Bu prensip ile anlatılmak istenen şey nesnenin sadece tek bir sorumluluğu olmalı, olası bir değişiklik tek bir nedene dayanmalıdır.
2- (O)pen/Closed
Bu prensibe göre uygulama üzerine yeni modüller eklenebilmeli ama bu mevcut kodlar değiştirilmeden olmalidir.
3- (L)iskov’s Substitution
Bu prensip aslında Open/Close prensibinin bir uzantısı olmakla beraber, bir sınıftan yeni bir sınıf türetirken türedikleri sınıfın işlevini bozmadığından emin olmalımız gerektiğini söyler.
4- (I)nterface Segregation
Nesnelerin ihtiyaç duymadıkları metodların Interface’lerinden münkün olduğunca ayrıştırılmasıdır.
5- (D)ependency Inversion
Bu prensibe gore, yüksek seviyeli sınıflar, düşük seviyeli sınıflara bağlı olmamalı, her ikisi de soyut kavramlara bağlı olmalıdır.
https://prezi.com/4sxxoweuzkow/solid-prensipleri/